Python 可能未声明Lambda事件处理程序?
所以在阅读了lambda事件处理程序之后,我真的很困惑。例如,我有两行代码:Python 可能未声明Lambda事件处理程序?,python,lambda,Python,Lambda,所以在阅读了lambda事件处理程序之后,我真的很困惑。例如,我有两行代码: b1 = Button(root,text="Show",command=(lambda e=ents :fetch(e))) root.bind("<Return>",(lambda event, e=ents : fetch(e))) 对于第一行,lambda没有使用事件参数,我们直接给出了上下文(ents),而我们在绑定期间使用了事件。那么,为什么我们在一种情况下使用事件,而在另一种情况下不使用事
b1 = Button(root,text="Show",command=(lambda e=ents :fetch(e)))
root.bind("<Return>",(lambda event, e=ents : fetch(e)))
对于第一行,lambda没有使用事件参数,我们直接给出了上下文(ents
),而我们在绑定期间使用了事件。那么,为什么我们在一种情况下使用事件,而在另一种情况下不使用事件呢
另一个问题,为什么我们必须将列表分配给一个变量(在本例中是e
),而不能直接使用它
root.bind(“,(lambda事件,ents:fetch(ents)))
因为如果是这样,它将返回一个错误:
()缺少1个必需的位置参数:“ents”
按钮的命令
参数是在没有参数的情况下调用的
使用一个参数调用事件绑定的处理程序,即事件本身
两个lambda中的e=ents
,虽然在技术上是一个参数,但不要求或期望将任何实际参数传递给lambda;这只是一种捕获值以在lambda中使用的惯用方法。您可以轻松编写类似于lambda:fetch(ents)
的内容。两个细微差别:
e=ents
捕获定义lambda时ents
的值,该值的任何后续更改都将被忽略。这在这里可能相关,也可能无关调用按钮的
命令
参数时没有参数
使用一个参数调用事件绑定的处理程序,即事件本身
两个lambda中的e=ents
,虽然在技术上是一个参数,但不要求或期望将任何实际参数传递给lambda;这只是一种捕获值以在lambda中使用的惯用方法。您可以轻松编写类似于lambda:fetch(ents)
的内容。两个细微差别:
e=ents
捕获定义lambda时ents
的值,该值的任何后续更改都将被忽略。这在这里可能相关,也可能无关对于第二个问题,
e=ents
将变量ents
的当前值指定给函数参数e
,作为默认参数。这意味着在调用lambda函数时,不必提供该参数。对于第二个问题,e=ents
将变量ents
的当前值指定给函数参数e
,作为默认参数。这意味着当调用lambda函数时,不必提供该参数。谢谢,这完全回答了我的问题,祝你愉快谢谢,这完全回答了我的问题,祝你愉快
def fetch(entries):
for entry in entries:
field = entry[0]
text = entry[1].get()
print ("%s: %s" %(field,text))