gpt4 book ai didi

python-3.x - 如何在 Python 闭包中捕获值

转载 作者:行者123 更新时间:2023-12-05 03:37:25 26 4
gpt4 key购买 nike

如何在 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,以便得到“鸟”、“鱼”、“斑马”?

最佳答案

我找到了答案 hereBob Kerner 的博客文章中.

def makeListOfFuncs( strings):
list = []
for str in strings:
def generateFunc( str):
def echo():
return str
return echo
list.append( generateFunc( str))
return list

for animalFunc in makeListOfFuncs( ['bird', 'fish', 'zebra']):
print( animalFunc())

Python 闭包很奇怪。

关于python-3.x - 如何在 Python 闭包中捕获值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69326838/

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