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

Mengapa Lambda Berfungsi dalam Python Untuk Gelung Hanya Menangkap Nilai Terakhir?

Linda Hamilton
Lepaskan: 2024-12-06 02:29:10
asal
503 orang telah melayarinya

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

Lambda in for Loop Sahaja Mengambil Nilai Terakhir

Apabila menggunakan fungsi lambda dalam gelung for, nilai yang ditangkap oleh lambda mungkin bukan yang dimaksudkan. Isu ini timbul disebabkan oleh cara pengumpulan sampah Python beroperasi, menyebabkan hanya nilai terakhir pembolehubah dikekalkan.

Untuk menggambarkan konsep ini:

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

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

Dalam kod ini, setiap fungsi lambda harus menangkap nilai pilihan yang unik, tetapi semua akan berkelakuan seolah-olah pilihan telah ditetapkan kepada "DEBUG," nilai akhir yang diandaikan dalam gelung.

Untuk menyelesaikan isu ini, seperti yang dicadangkan dalam penyelesaian, setiap fungsi lambda mesti menangkap pembolehubahnya sendiri. Ini boleh dicapai dengan memberikan pembolehubah tempatan baharu kepada pilihan, seperti berikut:

for i in range(len(options)):
    opt = options[i]  # Assign a new variable to capture the unique value
    __cMenu.add_command(
        label="{}".format(opt),
        command=lambda: self.filter_records(column, opt)
    )
Salin selepas log masuk

Sebagai alternatif, ungkapan lambda boleh ditulis semula seperti berikut:

lambda opt=option: self.filter_records(column, opt)  # Differentiate loop variable and function parameter
Salin selepas log masuk

Dengan menangkap nilai yang sesuai, fungsi lambda boleh berfungsi secara bebas dalam satu gelung, membolehkan gelagat yang dimaksudkan dicapai.

Atas ialah kandungan terperinci Mengapa Lambda Berfungsi dalam Python Untuk Gelung Hanya Menangkap 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan