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()
這個(gè)程序的效果是 有一個(gè)按鈕,按一下,就出現(xiàn)you hit me 再按一下就消失,如此循環(huán)為什么button寫成button = tk.Button(window,text = ’生成題目和答案’,font = ((’微軟雅黑’),12),command = run()),函數(shù)調(diào)用時(shí)加了括號,再按按鈕,就一直是you hit me ,上面的lable里的內(nèi)容不再變化了?
問題解答
回答1:button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run)
這句,只是將run這個(gè)函數(shù)本身讓button保存下來,在button被點(diǎn)擊后會(huì)自動(dòng)調(diào)用(相當(dāng)于點(diǎn)擊后才運(yùn)行run())。如果改成
button = tk.Button(window,text = ’hit’,font = ((’微軟雅黑’),12),command = run())
解釋器會(huì)在看到這句的時(shí)候立即調(diào)用一次run(),然后把調(diào)用的返回值讓button保存下來,現(xiàn)在button被點(diǎn)擊后調(diào)用的就是這個(gè)返回值(這個(gè)例子下就是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. html - 前端大牛都頂一下!CSS鼠標(biāo)樣式問題,如圖所示2. html5 - canvas中的mousedrag事件,為什么鼠標(biāo)拖出canvas,然后再次移入canvas,drag事件還觸發(fā)3. node.js - 在nodejs環(huán)境中如何配置webhook以實(shí)現(xiàn)hexo博客的自動(dòng)更新?4. 網(wǎng)頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導(dǎo)致自動(dòng)寫入下一條,如何解決?5. 百度地圖api - Android百度地圖SDK,MapView上層按鈕可見卻不可觸,怎么解決?6. mysql 獲取時(shí)間函數(shù)unix_timestamp 問題?7. javascript - es6擴(kuò)展運(yùn)算符...的問題8. 新入手layuiadmin,部署到tp中。想用php自已寫一個(gè)后臺管理系統(tǒng)。9. javascript - jquery怎么給select option一個(gè)點(diǎn)擊時(shí)觸發(fā)的事件,如圖 如果選擇自定義觸發(fā)一個(gè)時(shí)間?10. css3 - 求教CSS圖標(biāo)庫的寫法,也就是先做雪碧圖,然后寫一個(gè)css表,用的時(shí)候直接用class就可以了
