Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Perintah Butang Saya Sentiasa Mencetak Indeks yang Sama dalam Gelung dengan Lambda?

Mengapa Perintah Butang Saya Sentiasa Mencetak Indeks yang Sama dalam Gelung dengan Lambda?

Susan Sarandon
Lepaskan: 2024-10-26 03:54:27
asal
961 orang telah melayarinya

 Why Does My Button's Command Always Print the Same Index in a Loop with a Lambda?

Memahami Penutupan dalam Lambda: Menyelesaikan Pembolehubah

Dalam situasi ini, anda cuba mencipta berbilang butang dalam satu gelung, dengan setiap butang yang mencetuskan arahan yang mencetak nilai indeks tertentu. Walau bagaimanapun, anda menghadapi masalah apabila arahan butang sentiasa mencetak indeks yang sama, "5."

Tingkah laku ini berpunca daripada sifat penutupan dalam lambdas. Apabila lambda ditakrifkan, ia menangkap pembolehubah skop yang disertakan dan merujuknya apabila dilaksanakan. Dalam kes anda, skop yang disertakan ialah gelung, di mana pembolehubah i mewakili indeks semasa.

Malangnya, apabila lambda dilaksanakan (apabila butang ditekan), nilai i telah mencapai yang terakhir. lelaran dan sama dengan "5" untuk semua butang. Ini kerana pembolehubah yang ditangkap i ialah rujukan kepada lokasi memori yang sama dan nilai yang dipegangnya dikemas kini semasa gelung berlangsung.

Untuk menyelesaikan isu ini, anda perlu membuat penutupan yang menangkap nilai yang betul daripada i untuk setiap butang. Anda boleh melakukan ini dengan menyediakan nilai lalai untuk parameter i dalam fungsi lambda. Contohnya:

<code class="python">make_button = Tkinter.Button(frame, text="make!",
                              command=lambda i=i: makeId(i))</code>
Salin selepas log masuk

Dengan memberikan i=i sebagai nilai lalai untuk parameter lambda, anda sedang mencipta pembolehubah setempat i yang memegang nilai indeks yang betul untuk setiap butang. Apabila butang ditekan, fungsi lambda akan dilaksanakan dengan pembolehubah tempatan yang ditangkap i, dan indeks yang betul akan dicetak.

Atas ialah kandungan terperinci Mengapa Perintah Butang Saya Sentiasa Mencetak Indeks yang Sama dalam Gelung dengan Lambda?. 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