理解python中的lambda并使用它传递多个参数

Tal*_*sin 77 python tkinter python-3.x

看完我在lambda上找到的一切后,我仍然不明白如何让它做我想做的事.

每个人都使用这个例子:

lambda x, y : x + y
Run Code Online (Sandbox Code Playgroud)

为什么你需要在两者之前xy之前说明:?另外你如何让它返回多个参数?

例如:

self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Run Code Online (Sandbox Code Playgroud)

这很好用.但是以下代码不会:

self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Run Code Online (Sandbox Code Playgroud)

它产生错误:

TypeError :()不带参数(给定1个)

phi*_*ler 119

为什么你需要在':'之前说明'x'和'y'?

因为lambda(在概念上)与函数相同,所以只是内联编写.你的例子相当于

def f(x, y) : return x + y
Run Code Online (Sandbox Code Playgroud)

只是没有将它绑定到像这样的名称f.

另外你如何让它返回多个参数?

与功能相同的方式.最好是返回一个元组:

lambda x, y: (x+y, x-y)
Run Code Online (Sandbox Code Playgroud)

或者列表,类或其他什么.

self.entry_1.bindDemosthenex应该回答这个问题.

  • 要真正从中获得最少的一点,你可以尝试一些函数式编程,当你开始理解它时这是一个很棒的体验,并且可能会让你成为一个更好的程序员.</ propaganda> (2认同)
  • 你是我的上帝,你的宣传是我的日常食物。但是,我尝试将其应用于元组:`(train [“ pred_idx_cos”],train [“ target”])。apply(lambda x,y:get_result(x,y))`,似乎没有工作。拜托,从程序编程的迷雾中拯救我的灵魂 (2认同)

Dem*_*nex 11

我相信bind总是试图发送一个事件参数.尝试:

self.entry_1.bind("<Return>", lambda event: self.calculate(self.buttonOut_1.grid_info(), 1))
Run Code Online (Sandbox Code Playgroud)

您接受参数并且从不使用它.

  • 您还可以尝试"event = None"为其提供默认值,然后该函数可用于绑定和按钮. (3认同)
  • 因为它们是_fuction parameters_. (2认同)

kin*_*all 5

为什么你需要在两者之前xy之前说明:

因为它是一个函数定义,它需要知道函数接受什么参数,以及按什么顺序.它不仅可以查看表达式并使用变量名称,因为其中一些名称可能要使用现有的本地或全局变量值,即使它这样做,也不知道它的顺序是什么应该期望得到它们.

您的错误消息表示Tk使用一个参数调用您的lambda,而您的lambda编写为不接受任何参数.如果您不需要参数,只需接受一个,不要使用它.(Demosthenex有代码,我会发布它,但被打败了.)