2014-09-23 52 views
0

我知道,点击按钮时调用一个函数,我们在按钮Widget括号内写入command = name_of_function。但是,当我们试图通过在函数名称后面的括号内添加一个参数来将值传递给函数时,该函数被调用得太早,而不是单击该按钮时。为按钮指定一个函数 - lambda有什么不同?

我知道我们可以使用lambda来解决这个问题。 command = Lambda: name_of_function(argument)

但我不明白的是为什么lambda工作,而不是一个普通的函数调用用括号和参数?

例如,这个工程:

editmenu.add_command(label="1. Problem Definition", command=lambda: changeText(0)) 

但这并不:

editmenu.add_command(label="1. Problem Definition", command=changeText(0)) 
+0

请提供的示例代码 – 2014-09-23 07:29:22

+0

谢谢jonrsharpe! – sw123456 2014-09-23 07:40:43

回答

0

不会有什么lambda定义一个新的匿名函数,当它被调用时,将调用函数 - 所以是这样的:

api_call(command=lambda: my_function(23)) 

非常相似:

def temp_func(): 
     my_function(23) 

    ..... 
    ..... 
    api_call(command=temp_func) 

主要区别在于temp_func未定义,不能轻易重复使用。

+0

不知道编辑实际添加任何东西,但它确实删除刻意强调的“定义”, - 这是定义,而不是调用(呼叫),这是很重要的位置 - 因此我的重点。 – 2014-09-23 08:08:50

+1

这可能是值得注意的第三个选项,'命令=部分(创建my_function,23)'。不同于'lambda',这至少给你在回溯有用的,而不是''的东西,这是不太可能误导新手以为它是一个老鹰函数调用。 – abarnert 2014-09-23 08:13:06

相关问题