【问题标题】:Differences between 'lambda:' and 'lambda x:' in pythonpython中'lambda:'和'lambda x:'之间的区别
【发布时间】:2015-06-18 20:17:10
【问题描述】:

我正在使用 tkinter 并且对 lambda 函数感到困惑。第一条语句在command = lambda: Main.new_file(self.pt) 中使用lambda:。而第二个语句需要lambda x:

# 1st statement
filemenu.add_command(label='New', accelerator='Ctrl+N', underline=0, command= lambda: Main.new_file(self.pt))

#2nd Statement
self.frame.bind('<Configure>', lambda x: self.canvas.configure(scrollregion=self.canvas.bbox('all')))

【问题讨论】:

  • lambda 基本上只是一个内联函数。 lambda可以理解为def myfunc():lambda x:可以理解为def myfunc(x):
  • 前者是一个不带参数的lambda。后者是一个接受单个参数的 lambda,它被命名为 x
  • 如前所述,x 是一个参数。在这里使用它是因为使用菜单项不会将参数传递给回调函数,但Configure 事件(以及其他事件,如键盘/鼠标事件)确实会将参数传递给它们的回调函数。

标签: python python-3.x lambda tkinter


【解决方案1】:

lambda 在 python 中是内联函数。 lambda 的格式是 -

lambda <parameter list>: <expression>

如果您的参数列表为空,那么您的 lambda 表达式将如下所示:

foo = lambda: print('something')
foo()
>> something

您在不传递参数的情况下调用此类lambda 函数。

如果你有参数要传递给lambda 函数,你会这样写:

func1 = lambda x: print(x)
func2 = lambda x,y: print(x + y)
func1(1)
>> 1
func2(4,5)
>> 9
...

这里x(或xy)是内联函数的参数。

【讨论】:

    【解决方案2】:

    lambda x: ... 大致相当于:

    def IDontCareWhatTheFunctionIsCalled(x): ...
    

    lambda: ... 大致相当于:

    def IDontCareWhatTheFunctionIsCalled(): ...
    

    当调用它的东西添加参数时使用第一种形式(例如使用bind时的event参数),当调用者这样做时你可以使用后者传递参数(如为按钮的command属性指定回调)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2011-05-21
      • 2012-12-09
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多