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

Chi*_*lus -1 python tkinter

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

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

这是代码行:

filemenu.add_command(label="update...", command=CreateWindow)
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 8

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

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

这实际上相当于:

def f():
     CreateWindow(some_arguments, go_here)

filemenu.add_command(label="update...", command=f)
Run Code Online (Sandbox Code Playgroud)

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