python中def定義的函數加括號和不加括號的區別?
問題描述
程序如下:
import tkinter as tkwindow = tk.Tk()window.title('我的程序')window.geometry(’400x300’)var = tk.StringVar()lable = tk.Label(window,textvariable = var,font = ((’微軟雅黑’),12))lable.pack()on_hit = Truedef run(): global on_hit if on_hit == True:on_hit = Falsevar.set(’you hit me’) else:on_hit = Truevar.set(’’)button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run)button.pack()window.mainloop()
這個程序的效果是 有一個按鈕,按一下,就出現you hit me 再按一下就消失,如此循環為什么button寫成button = tk.Button(window,text = ’生成題目和答案’,font = ((’微軟雅黑’),12),command = run()),函數調用時加了括號,再按按鈕,就一直是you hit me ,上面的lable里的內容不再變化了?
問題解答
回答1:button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run)
這句,只是將run這個函數本身讓button保存下來,在button被點擊后會自動調用(相當于點擊后才運行run())。如果改成
button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run())
解釋器會在看到這句的時候立即調用一次run(),然后把調用的返回值讓button保存下來,現在button被點擊后調用的就是這個返回值(這個例子下就是None)。
回答2:command有兩種方式調用:b = Button(... command = button)b = Button(... command = lambda: button(’hey’))
你想要用()調用的話可以用lambda寫:button = tk.Button(window,text = ’生成題目和答案’,font = ((’微軟雅黑’),12),command =lambda:run())
相關文章:
1. 數組按鍵值封裝!2. java - 阿里的開發手冊中為什么禁用map來作為查詢的接受類?3. docker不顯示端口映射呢?4. javascript - 為什么創建多行多列的表格最后只有一行內有表格5. html5 - 使用echarts中的圖表 一個頁面導入了好幾個js圖表 實現echarts圖表隨著瀏覽器窗口變化而變化時出現了問題6. python - flask用ajax做后臺登陸交互,驗證密碼后,如何重新定位到index.html上?7. python - SQLAlchemy 向對應的id插入數據怎么操作?8. python - django 使用 redirect 跳轉網頁,怎么傳遞 referer 給目標網頁9. 網頁爬蟲 - python 爬蟲怎么處理json內容10. clone - git sourceTree克隆倉庫時,都不停彈出Password Required彈窗,即時輸入正確的git賬號密碼還是彈出
