在以下Python lambda调用的情况下,我需要为函数设置一个参数才能正常工作:
name = Entry(self.new_jobtile, width=30)
...
name.bind('<Return>', lambda x:self.create_tile(name.get()))
但是,如果我使用Button,那么同样的lambda调用在没有&#34; x&#34;参数:
Button(self.new_jobtile, text="OK", command=lambda: self.create_tile(name.get()), width=4, height=2).pack(side=BOTTOM, pady=3, padx=5)
我真的不明白为什么?
答案 0 :(得分:0)
在Python中,您可以创建不带参数的lambda函数:
bar = lambda : 4*2
bar() # 8
我不知道您使用的是哪个库,但我认为name.bind
第二个参数应该是一个参数(如lambda x:
或def foo(x):
),但在Button
中构造函数参数command
应该是0参数的函数(如lambda :
或def foo():
)。
答案 1 :(得分:0)
我不知道Entry
和Button
类的API,但这是我的猜测。 bind
的{{1}}方法可能要求回调函数(你的lambda)有一个参数,换句话说,Entry
方法中的某个地方可以是这样的一段代码:< / p>
bind
您只需忽略此参数,但您可以找出def bind(self, an_argument, yourcallback):
yourcallback(something)
方法传递给回调的内容:
bind
另一方面,name.bind('<Return>', lambda x:self.create_tile(str(x) + " " + name.get()))
方法不传递参数。所以你的lambda就是这样的。