Bu örneği ele alalımlambda
def dump(value):
print value
items = []
for i in range(0, 2):
items.append(lambda: dump(i))
for item in items:
item()
çıkışı:
1
1
nasıl alabilirim:
0
1
Bu örneği ele alalımlambda
def dump(value):
print value
items = []
for i in range(0, 2):
items.append(lambda: dump(i))
for item in items:
item()
çıkışı:
1
1
nasıl alabilirim:
0
1
Üzerinde varsayılan bir değere sahip bir parametresini kullanabilirsiniz lambda:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
Bu, varsayılan değer, işlev tanımlandığında değil, çağrıldığında, değerlendirildiği için çalışır.
for i in range(0, 2):
items.append(lambda i=i: dump(i))
i
mevcut değerini yakalamak için, ve i
harici değişken, ancak bir işlev değil:
kullanabilirsiniz Varsayılan olarak istediğiniz değere sahip olacak parametre.
Daha ayrıntılı bir açıklama bu answer bulunabilir.
Çıktı değeri, bildirimde değil, işlev değerlendirmesinde i değeridir. Bu yüzden istenen sonucu almıyorsunuz.
tamlığı için, ayrıca yapabilirsiniz:
for i in range(0, 2):
items.append((lambda i: lambda: dump(i))(i))
Bu cevabın, varsayılan değer yanıtından daha ayrıntılı olmasına rağmen, en az hacky olduğunu hissediyorum. – max
adam, akıllı. Bu örnekydi ama geçici bir çözüm buldunuz, bu noktada lambda tanımıyla ilgili referansın nasıl değerlendirileceği ele alındı. Bunu yapmanın bir yolu var mı? – bradojevic