gpt4 book ai didi

Python lambda 绑定(bind)到本地值

转载 作者:IT老高 更新时间:2023-10-28 20:24:47 25 4
gpt4 key购买 nike

以下代码吐出 1 两次,但我希望看到 0 然后是 1

def pv(v) :
print v

x = []
for v in range(2):
x.append(lambda : pv(v))

for xx in x:
xx()

我希望 python lambdas 在幕后绑定(bind)到局部变量指向的引用。然而,情况似乎并非如此。我在一个大型系统中遇到了这个问题,其中 lambda 正在执行现代 C++ 的等效绑定(bind)(例如,'boost::bind'),在这种情况下,您将绑定(bind)到智能 ptr 或复制构造 lambda 的副本。

那么,如何将局部变量绑定(bind)到 lambda 函数并让它在使用时保留正确的引用?我对这种行为感到非常惊讶,因为我不希望有垃圾收集器的语言会出现这种情况。

最佳答案

x.append(lambda : pv(v)) 更改为 x.append(lambda v=v: pv(v))

您希望“python lambdas 在幕后绑定(bind)到局部变量指向的引用”,但这不是 Python 的工作方式。 Python 在调用函数时查找变量名,而不是在创建时查找。使用默认参数是有效的,因为默认参数是在创建函数时计算的,而不是在调用它时。

这并不是 lambda 的特殊之处。考虑:

x = "before foo defined"
def foo():
print x
x = "after foo was defined"
foo()

打印

after foo was defined

关于Python lambda 绑定(bind)到本地值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452770/

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