Mengapa Butang \'Arahan\' Melaksanakan Serta-merta Apabila Diisytiharkan?

Barbara Streisand
Lepaskan: 2024-10-19 07:59:01
asal
493 orang telah melayarinya

Why Does the Button

Mengapa Parameter Butang "arahan" Dilaksanakan Apabila Diisytiharkan?

Dalam Python, parameter "perintah" widget Butang bertanggungjawab untuk mentakrifkan fungsi panggil balik. Walau bagaimanapun, pengguna mungkin bingung apabila fungsi panggil balik ini nampaknya dilaksanakan serta-merta selepas mengisytiharkan Butang.

Isu ini timbul apabila parameter "perintah" diberikan ungkapan panggilan fungsi dan bukannya objek fungsi. Contohnya:

<code class="python">def Hello():
    print("Hi there!")

Button(frame, text="Hello", command=Hello())  # Function call expression</code>
Salin selepas log masuk

Dalam kod ini, ungkapan "Hello()" memanggil fungsi Hello serta-merta, mengembalikan nilai pulangannya. Akibatnya, fungsi panggil balik dilaksanakan sebelum Butang dibuat, menghasilkan "Hai!" mesej sedang dicetak ke konsol.

Untuk mengelakkan isu ini dan menetapkan objek fungsi kepada parameter "perintah", gunakan nama fungsi tanpa tanda kurung:

<code class="python">Button(frame, text="Hello", command=Hello)  # Function object</code>
Salin selepas log masuk

Objek fungsi memegang rujukan kepada kod mereka, yang akan dilaksanakan apabila panggilan balik dipanggil. Selain itu, jika hujah perlu diluluskan, ungkapan lambda boleh digunakan:

<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>
Salin selepas log masuk

Dalam kes ini, ungkapan lambda membalut panggilan Goodnight("Moon"), menangguhkan pelaksanaannya sehingga butang diklik.

Atas ialah kandungan terperinci Mengapa Butang \'Arahan\' Melaksanakan Serta-merta Apabila Diisytiharkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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