C++ lambda는 [ ]로 캡처할 변수, 참조/복사 방식의 캡처를 지정해줄 수 있다.

그럼 파이썬의 경우엔? 별다르게 지정해주는게 없는데

 

한줄 요약 : lambda는 호출 시에 evaluate되며, 모르는 변수는 outer scope에서 참조한다.

그래서, 람다 선언에 일단 넣어두고, 나중에 그 변수를 정의한 뒤 람다를 호출하는 것이 가능하다.

squares = []
for x in range(5):
	squares.append(lambda: x ** 2)

print(squares[2]()) # 16
print(squares[4]()) # 16

x = 8
print(squares[2]()) # 64 (람다의 x가 8을 참조)

참고 : https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result

 

Q. 바깥 변수 capture하는 scope는?
> The expression inside a lambda is evaluated when the function is called, not when it is defined.
https://stackoverflow.com/questions/22335171/in-python-why-can-a-lambda-expression-refer-to-the-variable-being-defined-but-n

즉, 호출될때 바깥 참조

ex = lambda n: n*multiplier
...
multiplier = 3
print(ex(5)) # 15
print(ex(10)) # 30

 

이것도 읽어보기 (loop예시)

https://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture

+ Recent posts