在阅读了我能找到的关于Python中lambda表达式的所有内容之后,我仍然不明白如何让它做我想要的事情。
每个人都用这个例子:
lambda x, y : x + y
为什么需要在:
之前声明x
和y
?如何让它返回多个参数?
例如:
self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
这个很好用。但下面的代码不这样做:
self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
它会产生错误:
TypeError:()不接受参数(给定1个)
4条答案
按热度按时间pexxcrt21#
为什么需要在“:”之前同时声明“x”和“y”?
因为lambda(概念上)与函数相同,只是内联编写。您的示例相当于
只是没有将它绑定到像
f
这样的名称。如何让它返回多个参数?
就像一个函数一样。最好返回一个元组:
或者一个列表,或者一个类,或者其他什么。
关于
self.entry_1.bind
的问题应该由Demosthenex来回答。qhhrdooz2#
我相信bind总是尝试发送一个事件参数。尝试:
您接受该参数但从不使用它。
zpf6vheq3#
为什么需要在
:
之前声明x
和y
?因为它是一个函数定义,它需要知道函数接受什么参数,以及接受的顺序。它不能只查看表达式并使用其中的变量名称,因为其中一些名称可能需要使用现有的局部或全局变量值,即使它这样做了,它也不知道应该以什么顺序获得它们。
你的错误消息意味着Tk用一个参数调用你的lambda,而你的lambda被写成不接受参数。如果你不需要这个论点,就接受一个,不要使用它。(Demosthenex has the code,我本来要发布的,但被打败了。
eagi6jfj4#
为什么需要在“:”之前同时声明“x”和“y”?
实际上,在某些情况下(当你只有一个参数时),你可以不把x和y放在“:”之前。
但lambda中的i将被名称绑定,所以
与你想要的不同。