為什麼 Button 參數「command」在聲明時會被執行?
在 Python 中,Button 小部件的「command」參數負責定義回呼函數。然而,當這個回調函數似乎在聲明 Button 後立即執行時,使用者可能會感到困惑。
當「command」參數被指派函數呼叫表達式而不是函數物件時,就會出現此問題。例如:
<code class="python">def Hello(): print("Hi there!") Button(frame, text="Hello", command=Hello()) # Function call expression</code>
在此程式碼中,表達式「Hello()」立即呼叫 Hello 函數,並傳回其傳回值。結果,回調函數在建立 Button 之前執行,導致「Hi There!」訊息被印到控制台。
要避免此問題並將函數物件指派給「command」參數,請使用不含括號的函數名稱:
<code class="python">Button(frame, text="Hello", command=Hello) # Function object</code>
函數物件儲存對他們的程式碼,將在調用回調時執行。此外,如果需要傳遞參數,可以使用 lambda 表達式:
<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>
在這種情況下,lambda 表達式包裝 Goodnight("Moon") 調用,延遲其執行,直到單擊按鈕。
以上是為什麼按鈕“命令”在聲明後立即執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!