Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Butang \'Arahan\' Melaksanakan Serta-merta Apabila Diisytiharkan?

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

Barbara Streisand
Barbara Streisandasal
2024-10-19 07:59:01528semak imbas

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>

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>

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>

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!

Kenyataan:
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