gpt4 book ai didi

python - 调用存储在字典中的 lambda 时出现问题

转载 作者:行者123 更新时间:2023-12-01 05:29:18 27 4
gpt4 key购买 nike

我目前正在学习 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)

此问题已得到解答 hereherehereherehere

关于python - 调用存储在字典中的 lambda 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com