1
누군가 람다 함수를 만들고 싶다고 가정하고, 입력 인수를 제외하고 람다 함수의 모든 것을 함수의 로컬 변수처럼 취급하려고합니다. 그들은 어떻게 그것을 성취 할 것인가? 변수가 "로컬"이라고 말하면, 나는 람다 함수 밖에서 변수에 접근 할 수 없다는 것을 의미합니다.lamda 함수의 지역 변수가 파이썬에서 변경되는 것을 방지하려면 어떻게해야합니까?
코드
right = 5
demo_lamb = lambda left : print("INSIDE LAMB left == ", left, ",", "right == ", right)
for lt in range(0, 5):
demo_lamb(lt)
right = 100*lt + 99
print("OUTSIDE LAMB right == ", right)
인쇄 출력
INSIDE LAMB left == 0 , right == 5
OUTSIDE LAMB right == 99
INSIDE LAMB left == 1 , right == 99
OUTSIDE LAMB right == 199
INSIDE LAMB left == 2 , right == 199
OUTSIDE LAMB right == 299
INSIDE LAMB left == 3 , right == 299
OUTSIDE LAMB right == 399
INSIDE LAMB left == 4 , right == 399
OUTSIDE LAMB right == 499
원하는 출력 우리는 람다 함수의 내부의 모든 변수의 값을 "동결"어떻게
INSIDE LAMB left == 0 , right == 5
OUTSIDE LAMB right == 99
INSIDE LAMB left == 1 , right == 5
OUTSIDE LAMB right == 199
INSIDE LAMB left == 2 , right == 5
OUTSIDE LAMB right == 299
INSIDE LAMB left == 3 , right == 5
OUTSIDE LAMB right == 399
INSIDE LAMB left == 4 , right == 5
OUTSIDE LAMB right == 499
(제외 입력 인자)를 람다 함수가 만들어 졌을 때의 함수로 만들었습니까? copy
반입 및 copy.deepcopy(right)
와 람다 함수 내 right
교체
해결 실패
변수를 람다 함수에 바인딩해야합니다. –
'some_var = lambda'을 사용하고 있다면, 처음에는'lambda'를 사용하면 안되며,'lambda'는 익명 성임 ** 유일한 이점 **을 무효로합니다. –
그리고 문제는'right'가 지역 변수가 아니라 함수 위에 닫힌 * 자유 변수입니다. 문제는 파이썬이 어휘 범위를 가지고 있기 때문에,'right'는 항상 전역 범위에서'right'를 가리 킵니다. 가장 좋은 방법은 그것을 매개 변수로 만드는 것입니다. 또한,이 함수는'lambda' 함수와 아무 관련이 없습니다. ** 모든 함수는 이런 식으로 작동합니다 ** –