我目前正在学习 Python 并尝试字典和 lambda 函数的概念。我对以下代码有疑问:
def helloName(name):
print 'hello %s' % name
myList = ['one', 'two', 'three']
myDict = {}
print '====' * 4
for i in myList:
myDict[i] = lambda: helloName(i)
print i + ' : ' + str(myDict[i])
print '====' * 4
myDict['one']()
print myDict['one']
myDict['two']()
print myDict['two']
myDict['three']()
print myDict['three']
print '====' * 4
for i in myList:
myDict[i]()
print i + ' : ' + str(myDict[i])
该脚本的输出是:
================
one : <function <lambda> at 0x0060C330>
two : <function <lambda> at 0x01FB4FB0>
three : <function <lambda> at 0x01FA9570>
================
hello three
<function <lambda> at 0x0060C330>
hello three
<function <lambda> at 0x01FB4FB0>
hello three
<function <lambda> at 0x01FA9570>
================
hello one
one : <function <lambda> at 0x0060C330>
hello two
two : <function <lambda> at 0x01FB4FB0>
hello three
three : <function <lambda> at 0x01FA9570>
我不明白第二个输出行 block 。我期望与第三个输出行 block 完全相同的输出。
您能否帮助我了解两个输出之间的差异并建议修改以具有两倍相同的输出?
最佳答案
这是因为Python的闭包属性。解决这个问题
myDict[i] = lambda i=i: helloName(i)
关于python - 调用存储在字典中的 lambda 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659523/