나는 람다를 파이썬으로 배우고있다. 각 함수 fi(x)
이 목록 x
을 취하고 (x[i]-1)
을 반환하도록 함수 f = [f1, f2...]
의 목록을 만들어야합니다.왜이 간단한 람다 함수가 기괴한 결과를 내고 있습니까?
이것은 코딩을 시도한 방법이지만 놀라운 결과를 얻고 있습니다. 왜 세 장의 인쇄본이 각각 다른 결과를 내는지 이해해주십시오. 마지막 두 사람은 절대로 엉망이되었습니다.
f = [(lambda x: x[i]-1) for i in range(5)]
# I expect f to be [ (lambda x: x[0]-1), (lambda x: x[1]-1), ...]
x = [1, 2, 3, 4, 5]
print f[0](x), f[1](x), f[2](x) # output: 4 4 4 !!
print [f[i](x) for i in range(5)] # output: [0, 1, 2, 3, 4] as expected
print [f[k](x) for k in range(5)] # output: [4, 4, 4, 4, 4] wha?!!!
편집 :이 질문은 suggested duplicate과 완전히 다릅니다. 링크 된 질문에서 사용자가 함수 호출 대신 함수 목록을 만든 간단한 오류가있었습니다. 그러나 Tomasz Gandor의 대답은 여러 가지 예제를 사용하여 여기에서 질문 한 것과 동일한 문제에 대해 설명합니다.
https://stackoverflow.com/questions/6076270/python-lambda-function-in-list-comprehensions – 101
그냥 호기심에서, 왜 당신이 뭔가 코딩하고 있습니다 .. 기묘한? 순수한 학문적 관심사? 결국 Guido는 구현 한 것을 후회합니다. http://legacy.python.org/doc/essays/ppt/regrets/PythonRegrets.pdf – Arne
잘 파이썬 3에서는'i'와 함께 작동하지 않습니다 ... – Szabolcs