下面的代码吐出了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 ++的bind等效操作(例如'boost :: bind'),在这种情况下,您将绑定到智能ptr或copy构造lambda的副本。
那么,如何将局部变量绑定到lambda函数并在使用时保留正确的引用?我对这种行为很不满意,因为我不希望带有垃圾收集器的语言有这种行为。