Memahami Penangkapan Penutupan dalam Fungsi Lambda
Penutupan Python menangkap keadaan skop tertutup di mana ia ditakrifkan. Khususnya, mereka menangkap nilai pembolehubah yang dirujuk dalam fungsi lambda yang tidak terdapat dalam skopnya.
Dalam contoh yang diberikan, fungsi lambda menangkap pembolehubah i, yang diberikan nilai yang berbeza semasa gelung dilaksanakan. Walau bagaimanapun, fungsi lambda tidak menangkap rujukan kepada objek yang ditunjukkan oleh i. Sebaliknya, mereka menangkap nilai i pada masa penciptaan mereka.
Tingkah laku ini menerangkan hasil 6 yang tidak dijangka apabila memanggil penambah[1](3). Walaupun jangkaan rujukan kepada objek integer, fungsi lambda menangkap nilai 3, iaitu nilai akhir yang diberikan kepada i.
Untuk mencapai tingkah laku yang diingini untuk mengekalkan nilai semasa i dalam setiap fungsi lambda , teknik yang dipanggil lalai argumen boleh digunakan. Dengan memberikan hujah lalai kepada fungsi lambda, nilai i pada masa penciptaan dikunci masuk. Contohnya:
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i+a
Dalam kes ini, parameter i mempunyai nilai lalai yang ditetapkan kepada semasa nilai i. Apabila fungsi lambda digunakan, ia menggunakan nilai i yang telah ditangkap semasa penciptaannya.
Kaedah ini memastikan setiap fungsi lambda dalam tatasusunan penambah menangkap nilai yang dimaksudkan bagi i, membolehkan mereka menghasilkan yang diharapkan output apabila dipanggil.
Atas ialah kandungan terperinci Mengapa Fungsi Python Lambda Menangkap Nilai, Bukan Rujukan, dan Bagaimana Ini Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!