【发布时间】:2021-11-18 10:28:02
【问题描述】:
如何在 python 闭包中捕获值(而不是引用)?
我尝试过的:
这是一个创建无参数函数列表的函数,每个函数都输出一个字符串:
def makeListOfFuncs( strings):
list = []
for str in strings:
def echo():
return str
list.append( echo)
return list
如果 python 中的闭包像其他所有语言一样工作,我希望这样的调用:
for animalFunc in makeListOfFuncs( ['bird', 'fish', 'zebra']):
print( animalFunc())
... 会产生如下输出:
bird
fish
zebra
但在 python 中,我们得到:
zebra
zebra
zebra
显然,echo 函数的闭包正在捕获对 str 的引用,而不是在闭包构造时调用帧中的值。
如何定义 makeListOfFuncs,以便得到 'bird'、'fish'、'zebra'?
【问题讨论】:
标签: python-3.x closures