Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Lambda Berfungsi dalam Gelung Semua Merujuk kepada Pembolehubah Yang Sama?

Mengapa Lambda Berfungsi dalam Gelung Semua Merujuk kepada Pembolehubah Yang Sama?

Mary-Kate Olsen
Lepaskan: 2024-12-15 10:21:09
asal
396 orang telah melayarinya

Why Do Lambda Functions in a Loop All Refer to the Same Variable?

Gelagat Fungsi Lambda dalam Gelung

Dalam coretan kod yang diberikan, kamus sedang diisi dengan fungsi lambda. Setiap fungsi bertanggungjawab untuk menukar direktori semasa kepada a特定名称. Walau bagaimanapun, apabila gelung selesai, semua fungsi lambda merujuk nama direktori yang sama.

Untuk memahami sebab ini berlaku, adalah penting untuk mengenali sifat fungsi lambda dalam gelung. Fungsi Lambda ialah penutupan, bermakna ia menangkap nilai skop lampirannya. Dalam kes ini, fungsi lambda ditakrifkan dalam gelung dan menangkap nilai pembolehubah d.

Walau bagaimanapun, pembolehubah d sedang digunakan semula sepanjang gelung, secara berterusan menimpa nilainya. Akibatnya, semua fungsi lambda akhirnya menangkap nilai akhir yang sama d.

Penyelesaian

Untuk menyelesaikan isu ini, adalah perlu untuk mengikat setiap fungsi lambda kepada nilai tertentu d. Ini boleh dicapai dengan menggunakan nilai parameter lalai:

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

Dalam kod ini, fungsi lambda mengambil parameter pilihan d dengan nilai lalai bagi nilai semasa d dalam gelung. Memandangkan nilai parameter lalai dinilai apabila fungsi dicipta, setiap fungsi lambda akan menangkap nilai uniknya sendiri bagi d.

Sebagai alternatif, penutupan tambahan boleh digunakan untuk mencapai hasil yang sama:

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

Dalam kes ini, fungsi lambda luar digunakan untuk membuat penutupan di sekeliling pembolehubah d. Fungsi lambda dalaman kemudiannya digunakan untuk melakukan perubahan direktori.

Dengan menggunakan teknik ini, adalah mungkin untuk memastikan bahawa setiap fungsi lambda dalam gelung mempunyai pengikatan uniknya sendiri pada pembolehubah d, menghasilkan yang diingini tingkah laku.

Atas ialah kandungan terperinci Mengapa Lambda Berfungsi dalam Gelung Semua Merujuk kepada Pembolehubah Yang Sama?. 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