python中有和没有括号的函数之间的区别

时间:2015-07-06 11:29:29

标签: python tkinter

我有两个关于python的问题,假设下面的代码:

  1. 为什么不能将带括号或参数的函数传递给 add_command
  2. 如果我的CreateWindow函数必须参数,我该怎么办?
  3. 这是代码行:

    filemenu.add_command(label="update...", command=CreateWindow)
    

1 个答案:

答案 0 :(得分:8)

  1. 执行command=CreateWindow(some_argument)将导致CreateWindow立即执行,并且它返回的任何内容都将用作command的参数。 Python不够聪明,不能猜测你想让CreateWindow成为回调而不是它的返回值。

  2. 使用lambda表达式:filemenu.add_command(label="update...", command=lambda: CreateWindow(some_arguments, go_here))

  3. 这实际上相当于:

    def f():
         CreateWindow(some_arguments, go_here)
    
    filemenu.add_command(label="update...", command=f)
    

    ......但要短得多。