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
Linda Hamiltonasal
2024-12-06 02:29:10449semak imbas

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

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

Sebagai alternatif, ungkapan lambda boleh ditulis semula seperti berikut:

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

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!

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