python中def定義的函數(shù)加括號和不加括號的區(qū)別?
問題描述
程序如下:
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()
這個程序的效果是 有一個按鈕,按一下,就出現(xiàn)you hit me 再按一下就消失,如此循環(huán)為什么button寫成button = tk.Button(window,text = ’生成題目和答案’,font = ((’微軟雅黑’),12),command = run()),函數(shù)調(diào)用時加了括號,再按按鈕,就一直是you hit me ,上面的lable里的內(nèi)容不再變化了?
問題解答
回答1:button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run)
這句,只是將run這個函數(shù)本身讓button保存下來,在button被點擊后會自動調(diào)用(相當(dāng)于點擊后才運行run())。如果改成
button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run())
解釋器會在看到這句的時候立即調(diào)用一次run(),然后把調(diào)用的返回值讓button保存下來,現(xiàn)在button被點擊后調(diào)用的就是這個返回值(這個例子下就是None)。
回答2:command有兩種方式調(diào)用:b = Button(... command = button)b = Button(... command = lambda: button(’hey’))
你想要用()調(diào)用的話可以用lambda寫:button = tk.Button(window,text = ’生成題目和答案’,font = ((’微軟雅黑’),12),command =lambda:run())
相關(guān)文章:
1. javascript - node中為中間層如何解決跨域問題2. javascript - webpack打包問題3. ie-css3.htc 放在服務(wù)器上為什么不起作用4. android - As ddms報錯5. 看了好幾遍為什么點擊登錄沒有反應(yīng)呢 在線等。。。。6. html5 - 百度echart官網(wǎng)下載的地圖json數(shù)據(jù)亂碼7. 在mac下出現(xiàn)了兩個docker環(huán)境8. PhpStudy 8.0 一個服務(wù)器怎么創(chuàng)建多個網(wǎng)站,需要注意一些什么9. javascript - 請教一個問題,大家都是怎么安裝從github下面clone下來的包的開發(fā)環(huán)境呢?10. javascript - Object.create(null) 和 {} 區(qū)別是什么
