[TIL] 8/22 #Python 중첩함수 (Nested function) closure

김성진·2020년 8월 22일
0
post-thumbnail

Closure의 사용예시

만일 주어진 어떠한 숫자의 수(數) 을 구하는 함수는 다음과 같다.
def calculate_power(number, power):
return number ** power

calculate_power(2, 7)

128

자 이제, 주어진 숫자의 승을 구하는게 아니라 특정 숫자의 승을 구하는 함수를 구현한다고 생각해봅시다. 예를 들어, 2의 승을 구하는 함수를 구현한다면 다음과 같습니다.

def calculate_power_of_two(power):
return 2 ** power

calculate_power_of_two(7)

128
calculate_power_of_two(10)
1024

하지만 위의 함수는 2의 승밖에 구할 수 없습니다.
만일 특정 숫자의 숭을 구하는 함수가 필요 하지만 2가 아니라 설정되는 수의 승을 구하는 함수는 어떻게 구현할 수 있을까요?

이때 closure를 사용할 수 있습니다.

def generate_power(base_number):
def nth_power(power):
return base_number ** power

return nth_power

calculate_power_of_two = generate_power(2)
calculate_power_of_two(7)

128
calculate_power_of_two(10)
1024

calculate_power_of_seven = generate_power(7)
calculate_power_of_seven(3)

343
calculate_power_of_seven(5)
16907

중첩함수에서 중요한 점!!!
반드시 결과물 출력할때 반드시 parameter 값을 받고 있는 부모함수를 변수로 지정해주고, 그 변수 자체 parameter에 자식 값을 넣어준다!

ex)

def example(nums):
def example2(power):
return nums ** power

return example2

a = example(2)
print(a(7))

profile
multi-national communicator with programming (back-end)

0개의 댓글