Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Lambda Saya Berfungsi dalam Gelung Semua Merujuk kepada Pembolehubah Yang Sama?
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)
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)
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!