출처 : 윤성우의 열혈 파이썬 : 중급
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
'프로그래머 > Python' 카테고리의 다른 글
[윤성우의 열혈 파이썬 중급편] 33. 클래스 메소드와 static 메소드 (0) | 2020.12.24 |
---|---|
[윤성우의 열혈 파이썬 중급편] 32. 데코레이터 (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 30. property (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 29. __slots __의 효과 (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 28. 정보 은닉과 __dict __ (0) | 2020.12.24 |