중첩 함수 (Nested function)

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

15. 중첩 함수 (Nested function)

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

NameError: name 'inner_func' is not defined

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

본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [5]:
def outer_func(num):
    # 중첩 함수에서 외부 함수의 변수에 접근 가능
    def inner_func():
        print(num)
        return 'complex'
    
    return inner_func

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