Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Python Lambda terikat pada rujukan tempatan pada masa seruan, bukan masa penciptaan?
Pengikatan Python Lambda pada Rujukan Setempat
Kod berikut mencetak '1' dua kali dan bukannya '0' dan '1':
<code class="python">def pv(v): print v x = [] for v in range(2): x.append(lambda: pv(v)) for xx in x: xx()</code>
Untuk memahami tingkah laku ini, adalah penting untuk memahami cara Python lambdas berinteraksi dengan pembolehubah tempatan. Bertentangan dengan jangkaan, lambda tidak terikat pada rujukan pembolehubah tempatan pada masa penciptaannya. Sebaliknya, ia mengikat pada nilai pembolehubah yang diambil pada saat penyeruannya.
Untuk membetulkan isu ini dan mengikat pembolehubah setempat dengan betul kepada fungsi lambda, anda perlu menggunakan argumen lalai untuk lambda. Dengan menetapkan nilai lalai pembolehubah dalam definisi lambda (cth., lambda v=v: pv(v)), lambda akan merujuk kepada nilai pembolehubah apabila ia dicipta.
Tingkah laku ini ialah tidak eksklusif untuk lambda. Pertimbangkan contoh berikut:
<code class="python">x = "before foo defined" def foo(): print x x = "after foo was defined" foo()</code>
Output kod ini ialah "selepas foo ditakrifkan," kerana Python mencari nilai x pada masa fungsi dipanggil, bukannya semasa ia dicipta .
Atas ialah kandungan terperinci Mengapakah Python Lambda terikat pada rujukan tempatan pada masa seruan, bukan masa penciptaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!