Der folgende Code spuckt 1
zweimal aus, aber ich erwarte zu sehen 0
und dann 1
.
def pv(v) :
print v
x = []
for v in range(2):
x.append(lambda : pv(v))
for xx in x:
xx()
Ich hatte erwartet, dass Python-Lambdas hinter den Kulissen an die Referenz binden, auf die eine lokale Variable zeigt. Dies scheint jedoch nicht der Fall zu sein. Ich bin auf dieses Problem in einem großen System gestoßen, in dem das Lambda das moderne C ++ - Äquivalent einer Bindung ausführt (z. B. 'boost :: bind'), in dem Sie in einem solchen Fall an ein intelligentes ptr binden oder eine Kopie erstellen würden, um eine Kopie für das Lambda zu erstellen.
Wie binde ich eine lokale Variable an eine Lambda-Funktion und lasse sie bei Verwendung die richtige Referenz beibehalten? Ich bin ziemlich begeistert von dem Verhalten, da ich dies von einer Sprache mit einem Müllsammler nicht erwarten würde.