Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Lambda Berfungsi dalam Gelung Python Kadangkala Gagal Mengikat Dengan Betul?

Mengapa Lambda Berfungsi dalam Gelung Python Kadangkala Gagal Mengikat Dengan Betul?

Barbara Streisand
Lepaskan: 2024-12-26 19:43:22
asal
473 orang telah melayarinya

Why Do Lambda Functions in Python Loops Sometimes Fail to Bind Properly?

Fungsi Lambda dalam Gelung

Dalam Python, fungsi lambda menyediakan cara ringkas untuk mentakrifkan fungsi tanpa nama. Walau bagaimanapun, apabila digunakan dalam gelung, ia boleh membawa kepada tingkah laku yang tidak dijangka jika pengikatan yang betul tidak dipastikan.

Pertimbangkan coretan kod berikut:

directorys = {'login': <object>, 'home': <object>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))
Salin selepas log masuk

Niatnya adalah untuk mencipta arahan pemetaan kamus rentetan kepada fungsi yang menukar direktori. Walau bagaimanapun, hasilnya adalah tidak dijangka: dua fungsi lambda yang dicipta adalah sama dan melaksanakan arahan yang sama, menukar direktori kepada "log masuk."

Mengapa Ini Berlaku?

Fungsi Lambda dalam gelung berkongsi skop fungsi yang sama. Ini bermakna pembolehubah yang ditangkap oleh fungsi lambda adalah sama untuk semua lelaran gelung. Dalam kes ini, "d" mewakili nilai item terakhir dalam kamus "direktori", iaitu "log masuk."

Menyelesaikan Isu

Untuk memastikan pengikatan yang betul, kita perlu memastikan bahawa setiap fungsi lambda mempunyai akses kepada nilai uniknya sendiri iaitu "d." Satu pendekatan adalah untuk menghantar "d" sebagai parameter dengan nilai lalai:

lambda d=d: self.root.change_directory(d)
Salin selepas log masuk

Dengan menetapkan nilai lalai "d" kepada nilai semasa "d" dalam setiap lelaran gelung, kami buat penutupan unik untuk setiap fungsi lambda. Sebagai alternatif, kita boleh menggunakan teknik penutupan tambahan untuk mencapai hasil yang sama:

(lambda d=d: lambda: self.root.change_directory(d))()
Salin selepas log masuk

Fungsi lambda luar ini mencipta penutupan untuk "d" dan fungsi lambda dalam menggunakan "d" daripada penutupan.

Atas ialah kandungan terperinci Mengapa Lambda Berfungsi dalam Gelung Python Kadangkala Gagal Mengikat Dengan Betul?. 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