Bagaimanakah Fungsi Python Lambda Mengendalikan Rujukan Pembolehubah Tempatan dan Bilakah Ia Dinilai?

Linda Hamilton
Lepaskan: 2024-10-27 04:06:02
asal
426 orang telah melayarinya

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

Memahami Python Lambda Binding dengan Nilai Tempatan

Apabila bekerja dengan fungsi lambda dalam Python, adalah penting untuk memahami cara ia berinteraksi dengan pembolehubah setempat, terutamanya apabila berbilang lambda merujuk pembolehubah yang sama.

Pertimbangkan contoh berikut:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda: pv(v))  # Lambda binds to the reference of 'v'

for xx in x:
    xx()  # Prints 1 twice</code>
Salin selepas log masuk

Pada mulanya, anda mungkin menjangkakan fungsi lambda dalam senarai 'x' merujuk kepada 'v' semasa pada masa penciptaan mereka. Walau bagaimanapun, ini bukan cara Python berfungsi. Sebaliknya, Python menilai nama pembolehubah pada masa panggilan fungsi, membawa kepada kedua-dua lambda merujuk nilai akhir 'v' (iaitu 1).

Untuk mencapai tingkah laku yang diingini (mencetak 0 dan kemudian 1). ), anda boleh menggunakan mekanisme hujah lalai Python:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda v=v: pv(v))  # Lambda binds to the copy of 'v' at creation time

for xx in x:
    xx()  # Prints 0 and then 1</code>
Salin selepas log masuk

Dengan menetapkan hujah lalai untuk 'v', fungsi lambda terikat pada salinan tempatan 'v' yang dibuat pada masa penciptaannya, memastikan mereka mengekalkan rujukan yang betul apabila digunakan kemudian.

Ingat, Python mencari nama pembolehubah pada masa panggilan fungsi, bukan masa penciptaan. Prinsip ini digunakan bukan sahaja untuk lambda tetapi juga untuk fungsi biasa, seperti yang ditunjukkan oleh contoh berikut:

<code class="python">x = "before foo defined"

def foo():
    print(x)  # Prints "after foo was defined"

x = "after foo was defined"
foo()</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Fungsi Python Lambda Mengendalikan Rujukan Pembolehubah Tempatan dan Bilakah Ia Dinilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!