중첩 함수 (Nested function)

15. 중첩 함수 (Nested function)

  • 함수 내부에 정의된 또 다른 함수
  • 중첩함수는 해당 함수가 정의된 함수 내에서 호출 및 반환 가능
  • 함수 안에 선언된 변수는 함수 안에서만 사용 가능한 원리와 동일 (로컬 변수)
def outer_func():
    print('call outer_func function')
    
    # 중첩 함수의 정의
    def inner_func():
        return 'call inner_func function'
    
    # 중첩 함수 호출 
    print(inner_func())
outer_func()
초간단 연습1
outer_func() 함수의 출력을 보면서 왜 이렇게 출력이 되었는지 생각해보기~
# 중첩함수는 함수 밖에서는 호출 불가 (outer_func 함수 안에서 선언되었으니, outer_func 함수 안에서만 호출 가능)
inner_func()

그런데 중첩함수를 함수 밖에서도 호출할 수 있는 방법이 있다. 이 방법을 이해하기 위해 First-class function, closure 에 대해 다음 장에서 알아보자.

def outer_func(num):
    # 중첩 함수에서 외부 함수의 변수에 접근 가능
    def inner_func():
        print(num)
        return 'complex'
    
    return inner_func

fn = outer_func(10)    # <--- First-class function
print(fn())            # <--- Closure 호출