Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Fungsi Lambda Python Menangkap Nilai Akhir Pembolehubah Gelung, dan Bagaimanakah Ini Boleh Dibetulkan?

Mengapa Fungsi Lambda Python Menangkap Nilai Akhir Pembolehubah Gelung, dan Bagaimanakah Ini Boleh Dibetulkan?

Susan Sarandon
Lepaskan: 2024-12-20 03:26:09
asal
438 orang telah melayarinya

Why Do Python Lambda Functions Capture the Final Value of a Loop Variable, and How Can This Be Fixed?

Memahami Penangkapan Penutupan dalam Fungsi Lambda

Fungsi Lambda, alat yang ringkas dan mudah dalam pengaturcaraan, membenarkan fungsi tanpa nama yang disimpan dalam penutupan. Dalam Python, penutupan menangkap skop yang disertakan untuk mendapatkan akses kepada pembolehubah luaran, tetapi tingkah laku ini kadangkala boleh mengejutkan.

Pertimbangkan senario di mana satu set fungsi lambda dimulakan dalam gelung untuk menambah nombor tertentu pada input mereka. Secara intuitif, seseorang mungkin menjangkakan fungsi ini mengekalkan nilai pembolehubah gelung pada masa penciptaannya. Walau bagaimanapun, hasil sebenar adalah berbeza - semua fungsi lambda menangkap nilai akhir pembolehubah gelung.

Ini berlaku kerana penutupan dalam Python menangkap skop yang disertakan, bukan rujukan kepada pembolehubah atau objek tertentu. Dalam erti kata lain, fungsi lambda secara berkesan membenamkan rujukan kepada pembolehubah gelung i, yang berubah apabila gelung berlangsung. Akibatnya, apabila mana-mana fungsi ini dipanggil, ia menggunakan nilai akhir i, yang membawa kepada output yang tidak dijangka.

Menguatkuasakan Tangkapan Nilai dalam Fungsi Lambda

Untuk memintas perkara ini mengeluarkan dan menangkap nilai yang dimaksudkan bagi pembolehubah gelung, adalah perlu untuk memaksa tangkapan menggunakan parameter dengan nilai lalai. Dengan memperuntukkan pembolehubah kepada parameter dalam fungsi lambda dan membekalkan nilai lalai bagi nilai yang dimaksudkan, adalah mungkin untuk mengekalkan gelagat tangkapan yang diingini.

Contoh:

# Initialize an array of lambda functions
adders = [None, None, None, None]

# Create lambda functions with forced capture of i
for i in [0, 1, 2, 3]:
    adders[i] = lambda a, i=i: i + a

# Call a lambda function with input
print(adders[1](3))  # Output: 4
Salin selepas log masuk

Kesimpulan

Dengan memahami mekanisme tangkapan dalam fungsi lambda dan menggunakan teknik ini, adalah mungkin untuk mengawal nilai yang ditangkap oleh penutupan, memastikan tingkah laku yang diingini dalam pelaksanaan kod.

Atas ialah kandungan terperinci Mengapa Fungsi Lambda Python Menangkap Nilai Akhir Pembolehubah Gelung, dan Bagaimanakah Ini Boleh Dibetulkan?. 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