본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 31. nested 함수와 closure

출처 : 윤성우의 열혈 파이썬 : 중급

31. nested 함수와 closure

함수를 만들어서 반환하는 함수

def maker(m)
    def inner(n)
        return m * n
    return inner

f1 = maker(2)
f2 = maker(3)
f1(7)   # 14    실제 변수 m을 참조하게 되는 순간, maker 함수의 밖이다
f2(7)   # 21    
  • 파이썬의 함수는 객체이므로 다른 함수를 호출할 때 인자로도 전달이 가능하다
  • 예제에서 정의한 inner 함수가 변수 m의 값을 어딘가에 살짝 저장해 놓고 쓴다
  • '안쪽에 위치한 네스티드 함수'가 자신이 필요한 변수의 값을 어딘가에 저장해 놓고 쓰는 테크닉을 가리켜 클로저라고 한다

저장된 위치 확인하기

def maker(m):
    def inner(n):
        return m * n
    return inner

f1 = maker(101)
f2 = maker(75)
f1.__closure__[0].cell_contents # 101 
f2.__closure__[0].cell_contents # 75
  • maker 함수 안에 존재하는 네스티드 함수 inner가 변수 m의 값을 저장해 놓는 위치는
    • __closure __변수의 인덱스 0의 위치에 저장된 객체의 변수인 cell_contents