Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Lambdas Saya dalam For Loop Hanya Menggunakan Nilai Terakhir?

Mengapa Lambdas Saya dalam For Loop Hanya Menggunakan Nilai Terakhir?

Mary-Kate Olsen
Lepaskan: 2024-12-18 06:17:10
asal
214 orang telah melayarinya

Why Do My Lambdas in a For Loop Only Use the Last Value?

Lambda dalam For Loop Sahaja Mengambil Nilai Terakhir

Dalam kod berikut:

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

beberapa lambda dicipta dan disimpan. Lambda ini harus menangkap nilai berbeza bagi pilihan pembolehubah tempatan. Walau bagaimanapun, apabila lambda ini digunakan, mereka semua berkelakuan seolah-olah pilihan telah ditetapkan kepada "DEBUG", nilai terakhir yang digunakan dalam gelung.

Isu ini timbul disebabkan oleh pemasaan penilaian nama dalam badan fungsi . Dalam kod yang disediakan, nama-nama dinilai apabila fungsi itu dilaksanakan. Akibatnya, lambdas yang dibuat dalam gelung semuanya merujuk kepada nilai pilihan yang sama pada masa pelaksanaan, iaitu "DEBUG".

Untuk memintas masalah ini, pengubahsuaian berikut boleh dibuat:

__cMenu.add_command(label="{}".format(option),
    command=lambda opt=option: self.filter_records(column, opt))
Salin selepas log masuk

Dengan memperkenalkan option=option sebagai hujah kepada fungsi lambda, setiap lambda menangkap nilai pilihan yang betul pada masa penciptaan, sebaliknya daripada bergantung pada nilai pada masa pelaksanaan. Ini memastikan setiap lambda beroperasi pada nilai pilihan yang diingini.

Atas ialah kandungan terperinci Mengapa Lambdas Saya dalam For Loop Hanya Menggunakan 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