Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Fungsi Python Lambda Menangkap Nilai, Bukan Rujukan, dan Bagaimana Ini Boleh Diselesaikan?

Mengapa Fungsi Python Lambda Menangkap Nilai, Bukan Rujukan, dan Bagaimana Ini Boleh Diselesaikan?

Barbara Streisand
Lepaskan: 2024-12-27 10:18:10
asal
528 orang telah melayarinya

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

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
Salin selepas log masuk

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!

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