Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Lambdas dalam Gelung Menangkap Nilai Terakhir, dan Bagaimanakah Ini Boleh Dielakkan?

Mengapa Lambdas dalam Gelung Menangkap Nilai Terakhir, dan Bagaimanakah Ini Boleh Dielakkan?

Patricia Arquette
Patricia Arquetteasal
2024-12-23 17:01:09134semak imbas

Why Do Lambdas in Loops Capture the Last Value, and How Can This Be Avoided?

Lambda in For Loop Captures Last Value

Dalam kod anda:

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

setiap lambda menangkap pilihan pembolehubah , yang dinilai apabila fungsi lambda dicipta. Ini bermakna semua lambda menangkap nilai pilihan yang sama, iaitu nilai terakhir yang digunakan dalam gelung.

Untuk mengelakkan perkara ini, anda perlu memastikan setiap lambda menangkap nilai pilihan yang berbeza. Ini boleh dilakukan dengan menggunakan sintaks lambda dengan parameter pilihan, seperti:

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

Dalam kes ini, fungsi lambda menangkap nilai pilihan sebagai opt parameter, memastikan setiap lambda menangkap yang berbeza nilai pilihan.

Atas ialah kandungan terperinci Mengapa Lambdas dalam Gelung Menangkap Nilai Terakhir, dan Bagaimanakah Ini Boleh Dielakkan?. 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