最佳答案
下面的代码吐出 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 在幕后绑定到局部变量指向的引用。然而,情况似乎并非如此。我曾经在一个大型系统中遇到过这个问题,在这个系统中,lambda 正在执行现代 C + + 的绑定(例如,‘ ost: : bind’) ,在这种情况下,您将绑定到一个智能 ptr 或者复制构造一个 lambda 的副本。
那么,如何将局部变量绑定到 lambda 函数,并让它在使用时保留正确的引用呢?我对这种行为感到非常惊讶,因为我不希望从一个垃圾收集器的语言中得到这种结果。