Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Lambda Berfungsi dalam Gelung Hanya Mengembalikan Nilai Terakhir?

Mengapa Lambda Berfungsi dalam Gelung Hanya Mengembalikan Nilai Terakhir?

DDD
Lepaskan: 2024-12-13 14:36:13
asal
443 orang telah melayarinya

Why Do Lambda Functions in Loops Only Return the Last Value?

Lambda dalam For Loop Sahaja Mengambil Nilai Terakhir

Isu yang timbul apabila menggunakan fungsi lambda dalam gelung for yang sepatutnya menangkap nilai yang berbeza daripada pembolehubah tempatan. Walau bagaimanapun, diperhatikan bahawa apabila lambda ini digunakan, ia secara konsisten mengembalikan nilai akhir yang diberikan kepada pembolehubah setempat, walaupun ia berubah dalam gelung.

Memahami Isu

Tingkah laku yang membingungkan ini berpunca daripada masa penilaian fungsi lambda. Khususnya, nama yang digunakan dalam badan fungsi lambda dinilai apabila fungsi itu dilaksanakan, bukan pada masa definisinya.

Penyelesaian

Untuk menyelesaikan isu ini, ia adalah penting untuk menangkap nilai pembolehubah tempatan pada saat definisi lambda, bukan apabila ia digunakan. Satu pendekatan ialah mengisytiharkan pembolehubah yang anda ingin tangkap sebagai hujah kepada fungsi lambda.

options = ["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(label="{}".format(option),
                        command=lambda opt=option: self.filter_records(column, opt))
Salin selepas log masuk

Dengan menetapkan "option=option" sebelum titik bertindih, kami secara eksplisit menetapkan nilai "option" sebagai hujah kepada fungsi lambda, memastikan setiap lambda menangkap nilai yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Lambda Berfungsi dalam Gelung Hanya Mengembalikan Nilai Terakhir?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan