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