만일 주어진 어떠한 숫자의 수(數) 을 구하는 함수는 다음과 같다.
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))