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

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

Barbara Streisand
Lepaskan: 2024-12-29 03:45:10
asal
991 orang telah melayarinya

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

Lambda dalam Gelung

Dalam kod yang disediakan, niatnya adalah untuk mencipta kamus fungsi arahan di mana setiap nilai ialah ungkapan lambda yang memanggil self.root.change_directory dengan nama direktori tertentu. Walau bagaimanapun, kod tersebut secara tidak betul menyebabkan semua fungsi arahan melakukan perubahan direktori yang sama.

Isu timbul kerana ungkapan lambda merujuk pembolehubah tunggal, d, yang sama untuk setiap lelaran gelung. Akibatnya, semua ungkapan lambda akhirnya menunjuk kepada nilai terakhir d.

Untuk membetulkannya, adalah perlu untuk mengikat nilai unik d pada setiap ungkapan lambda. Ini boleh dicapai dengan menggunakan nilai lalai untuk parameter lambda, seperti ditunjukkan di bawah:

self.command["cd " + d] = lambda d=d: self.root.change_directory(d)
Salin selepas log masuk

Dalam kes ini, d=d mencipta pengikatan baharu d kepada nilai semasa d untuk setiap lelaran gelung itu. Akibatnya, setiap ungkapan lambda mempunyai rujukan uniknya sendiri kepada nilai d.

Sebagai alternatif, penutupan boleh digunakan untuk mencapai kesan yang sama:

self.command["cd " + d] = (lambda d: lambda: self.root.change_directory(d))(d)
Salin selepas log masuk

Penutupan ini mencipta yang baharu persekitaran untuk setiap ungkapan lambda, dengan d terikat kepada nilai semasa d. Oleh itu, setiap ungkapan lambda mempunyai akses kepada nilai unik d.

Atas ialah kandungan terperinci Mengapa Lambda Saya 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