Kod görüşmeler:lambda işlevi Python'daki parametreyi kapatmıyor mu? daha
from pprint import pprint
li = []
for i in range(5):
li.append(lambda : pprint(i))
for k in li:
k()
verim:
4 4 4 4 4
neden olmasın
0 1 2 3 4
??
Teşekkürler.
P.S. Ben tam bir dekoratör yazarsanız, beklendiği gibi çalışır: Sadece yerine Düzgün i
başvuru yok i
[bu soru] bölümüne bakın (http://stackoverflow.com/q/2295290/195823) ve [bu soruya cevabım] (http://stackoverflow.com/questions/2295290/what-do-lambda- işlev kapanışları-yakalama-python/2295372 # 2295372) –
Özgün döngüyü bir işleve taşıyarak değişkeni kapatmakta olduğunu görüyoruz ve sonra işlevini "k in li" satırından önce çağırıyorsunuz. Bu modül düzeyinde kapsamda geçerli bir isim değil. Hala çalışmaya devam edecektir (ve aynı sonucu elde ettiğinden, değeri değil referansı kapatır), yani ismin kapalı olduğu anlamına gelir. – agf
Hepinize teşekkür ederim.Bence http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture-in-python/2295368#2295368 sadece çözümü değil aynı zamanda neden olduğunu da söyler. Sanırım sorum http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture-in-python – Grissiom