function()与函数有什么不同?

时间:2018-06-09 04:09:39

标签: python function

这是我的代码中的函数 -

class worker(Thread):
def run(self):
    for x in range(0,1100000000000):
        print (x)
        time.sleep(1)

在这里调用 -

def main():
ttk.Button(mainframe, text="Start",command=worker.start)

现在Python也接受了函数赋值 -

ttk.Button(mainframe, text="Start",command=worker().start)

这两者有何不同?

2 个答案:

答案 0 :(得分:1)

  

第一个场景等待我在开始运行线程之前按下按钮,而第二个场景在程序运行后立即开始运行线程。有人可以解释这里到底发生了什么。

考虑这段代码:

ttk.Button(..., command=worker().start())

它的行为完全相同:

w = worker()
result = w.start()
ttk.Button(..., command = result)

这就是python的工作原理,并不是tkinter独有的。您只是要求python调用函数,并将结果作为参数传递给Button构造函数。

  

所以它意味着每次都会有更新,一个新的线程实例

不,tkinter是单线程的,mainloop()不会重新执行您的代码。它只是监听事件并将它们分派给处理程序。

答案 1 :(得分:0)

上周我开始在工作中写tkinter并找到了这个非常有用的教程

http://thinkingtkinter.sourceforge.net

第77,78和79课是关于这个具体问题的。

如果您使用“command = function”,它会存储该功能,只有在单击按钮或按下空格键并且按下按钮时才会调用该功能。

但是,如果使用“command = function()”,它会在创建按钮时调用该函数,而在单击按钮时则不起作用。

而不是“command = function()”使用“command = lambda:function()”

更多细节见第78课