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
DDDasal
2024-12-13 14:36:13448semak imbas

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))

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!

Kenyataan:
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