Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Lambda Berfungsi dalam Python Untuk Gelung Hanya Menangkap 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!