Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Lambda Berfungsi dalam Gelung Menangkap Nilai Indeks Akhir Daripada Nilai Lelaran Gelung?
Memahami Penutupan dalam Fungsi Python Lambda
Soalan Asal: Teka-teki Penutupan Lambda dengan Pencetakan Indeks
Dalam pengaturcaraan, penutupan merujuk kepada fungsi dalaman yang menangkap pembolehubah fungsi penutupnya walaupun selepas fungsi penutup telah kembali. Ini membolehkan fungsi dalaman mengekalkan akses kepada pembolehubah, menjadikannya berterusan sepanjang hayat penutupan.
Kes penggunaan biasa untuk ungkapan lambda adalah untuk mengikat pembolehubah kepada fungsi. Walau bagaimanapun, jika digunakan dalam gelung, seperti dalam kod contoh yang disediakan, fungsi lambda boleh mempamerkan gelagat yang tidak dijangka akibat penutupan.
Penjelasan Kod
Dalam kod yang diberikan, lima butang dicipta dalam satu gelung. Setiap butang diberikan fungsi lambda yang memanggil fungsi makeId() dan mencetak indeks i. Walau bagaimanapun, apabila pengguna mengklik pada mana-mana butang, fungsi makeId() sentiasa mencetak 5, iaitu nilai akhir i dalam gelung.
Masalah dan Penyelesaian
Isu ini timbul kerana apabila ungkapan lambda dilaksanakan, ia menyelesaikan pembolehubah i kepada nilainya pada masa itu. Memandangkan gelung telah ditamatkan pada masa itu, i diselesaikan kepada nilai terakhirnya, iaitu 5.
Untuk menyelesaikan isu ini, ungkapan lambda mesti diubah suai untuk menyatakan secara eksplisit nilai yang betul bagi i menggunakan parameter lambda . Secara lalai, lambdas menggunakan pembolehubah skop yang disertakan, tetapi menetapkan parameter memastikan pembolehubah setempat dengan nilai yang dikehendaki dicipta dalam lambda:
<code class="python">make_button = Tkinter.Button(frame, text="make!", command=lambda i=i: makeId(i))</code>
Dengan pengubahsuaian ini, fungsi lambda setiap butang menangkap nilai yang betul daripada i dari gelung, dan fungsi makeId() boleh mencetak indeks yang dimaksudkan dengan betul.
Nota Tambahan
Parameter lambda tidak perlu mempunyai yang sama nama sebagai pembolehubah yang disertakan. Ia boleh mempunyai sebarang nama, memastikan nilai yang betul ditangkap dalam skop lambda.
Atas ialah kandungan terperinci Mengapa Lambda Berfungsi dalam Gelung Menangkap Nilai Indeks Akhir Daripada Nilai Lelaran Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!