[Python]Nested Function
📌 Nested Function(중첩 함수)
- 함수 안의 함수, 즉 함수 안에 함수를 중첩하여 선언할 수 있다.
- 중첩함수는 상위 부모 함수 안에서만 호출이 가능하며, 부모 함수를 벗어나 호출될 수 없다.
# child_function은 parent_function 안에서만 호출이 가능함.
def parents_function():
def child_function():
print("child function 이라고,,")
child_function()
parents_function()
- 중첩 함수를 사용하는 이유
가독성
- 함수를 사용하는 이유는 반복되는 코드를 함수로 정의해 효과적으로 코드를 관리하고 가독성을 높이기 위함이다.
이와 같이 중첩함수를 사용하는 이유도 동일하게 함수 안의 코드 중 반복되는 코드를 중첩 함수로 선언하면 부모함수의 코드를 효과적으로 관리하고 가독성을 높일 수 있다.
def print_all_elements(list_of_things): # 부모 함수
def print_each_element(things): # 중첩 함수
for thing in things:
print(thing)
if len(list_of_things) > 0:
print_each_element(list_of_things)
else:
print("없어요")
print_all_elements([1,2,3,4,4])
Closure
- 중첩함수가 부모 함수의 변수나 정보를 가두어 사용하는 것을
closure
라고 한다. 그리고 부모함수는 중첩함수를 retuen 해준다. 즉 부모 함수에서 리턴했으므로 부모 함수의 변수는 직접적인 접근이 불가능 하지만 부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다.
- 클로저는 어떠한 정보를 기반으로 연산을 실행하고 싶지만, 기반이되는 정보는 접근을 제한하여 노출이 되거나 수정이 되지 못하게 하고 싶을 때 사용한다.
- 주로
factory 패턴
을 구현할 때 사용(뭔가를 생성해내는 패턴)
# child_function은 parent_function 안에서만 호출이 가능함.
def parents_function():
def child_function():
print("child function 이라고,,")
child_function()
parents_function()
이와 같이 중첩함수를 사용하는 이유도 동일하게 함수 안의 코드 중 반복되는 코드를 중첩 함수로 선언하면 부모함수의 코드를 효과적으로 관리하고 가독성을 높일 수 있다.
def print_all_elements(list_of_things): # 부모 함수
def print_each_element(things): # 중첩 함수
for thing in things:
print(thing)
if len(list_of_things) > 0:
print_each_element(list_of_things)
else:
print("없어요")
print_all_elements([1,2,3,4,4])
closure
라고 한다. 그리고 부모함수는 중첩함수를 retuen 해준다. 즉 부모 함수에서 리턴했으므로 부모 함수의 변수는 직접적인 접근이 불가능 하지만 부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다.factory 패턴
을 구현할 때 사용(뭔가를 생성해내는 패턴)예시를 들어 설명하면
# 특정 숫자의 승을 구하는 함수를 구현한다면?
def calculate_poser_of_two(power):
return 2 ** power
print(calculate_poser_of_two(7))
print(calculate_poser_of_two(5))
하지만 위의 함수는 2의 승밖에 구할 수 없다. 만약에 특정 숫자의 승을 구하는 함수가 필요 하지만 2가 아니라 원하는 수의 승을 구하는 함수를 어떻게 구현할 수 있을까? 이때 closure
함수를 사용하면 된다.
# 특정 숫자의 승을 구하는 함수를 구현한다면?
def generate_power(base_number):
def nth_power(power):
return base_number ** power
return nth_power
num = generate_power(5)
print(num(2))
#25
➡️ 부모함수의 변수인 base_number
이 중첩함수에 격리되어 사용된다(= closure). 그리고 중첩함수가 부모함수의 return 값으로 리턴됨을 확인할 수 있다.
Author And Source
이 문제에 관하여([Python]Nested Function), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@byhazy/Nested-Function저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)