Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah anda menangkap pembolehubah tempatan dalam penutupan lambda dalam gelung?
Penutupan Lambda dan Skop Pembolehubah dalam Gelung
Apabila mentakrifkan lambda dalam gelung, adalah penting untuk memahami cara skop pembolehubah berfungsi. Dalam coretan kod yang disediakan, setiap lambda yang dibuat di dalam gelung merujuk obj pembolehubah yang sama, yang diubah suai dengan setiap lelaran.
Resolusi Skop Lalai
Secara lalai, a lambda akan menangkap pembolehubah dari skop yang disertakan. Dalam kod yang diberikan, skop yang disertakan ialah blok gelung. Jadi, setiap lambda berkesan menangkap nilai terakhir obj. Tingkah laku ini boleh membawa kepada hasil yang salah apabila memanggil lambda daripada skop yang berbeza, kerana ia mungkin tidak mempunyai nilai yang dijangkakan.
Tangkap Pembolehubah Setempat
Untuk menyelesaikan isu ini , anda perlu memaksa lambda untuk menangkap nilai semasa obj. Ini boleh dicapai dengan memperkenalkan pembolehubah tempatan baharu dalam lambda yang terikat kepada obj pada masa penciptaan. Coretan kod berikut menunjukkan pendekatan ini:
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda obj=obj: obj.some_var)
Dengan menghantar obj secara eksplisit sebagai hujah kepada lambda, kami mencipta pembolehubah tempatan baharu untuk setiap lambda. Ini memastikan bahawa setiap lambda menangkap nilai setempat obj daripada lelaran gelung. Akibatnya, apabila anda memanggil lambda dari skop lain, mereka akan mengakses nilai yang betul.
Atas ialah kandungan terperinci Bagaimanakah anda menangkap pembolehubah tempatan dalam penutupan lambda dalam gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!