gpt4 book ai didi

python - 按值传递到闭包

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:42 25 4
gpt4 key购买 nike

假设我们有以下情况:

list names = ['foo','bar','derp','herp']
def outer_func():
funcs = []
for name in names:
def inner_func():
print(name)
funcs.append(inner_func)
return funcs

result_funcs = outer_func()
result_funcs[0]() # this will print 'herp'

我调试了一下,发现闭包包含对名称的引用所以我尝试这样做:

...
for name in names:
cpy = copy.copy(name)
def inner_func()
print cpy
...
result_funcs[0]() # this will still print 'herp'

但这仍然打印'herp'

似乎 python 持有指向实际值的外部作用域变量的指针(就像一个指向指针的指针)

我最终想要的是创建的每个内部函数在定义它的迭代期间保存名称的值。

有人可以向我解释我哪里错了,我怎样才能实现我的目标?

谢谢!

最佳答案

name 是惰性计算的,如您所料。

您可以通过将 name 定义为参数的默认值(您未使用)来强制绑定(bind) name

有几种方法可以做到,一种很简单:像这样:

  def inner_func(n=name):
print(n)

现在它打印 "foo"

关于python - 按值传递到闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454034/

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