Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可能未声明Lambda事件处理程序?_Python_Lambda - Fatal编程技术网

Python 可能未声明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),而我们在绑定期间使用了事件。那么,为什么我们在一种情况下使用事件,而在另一种情况下不使用事

所以在阅读了lambda事件处理程序之后,我真的很困惑。例如,我有两行代码:

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时稍微高效一些。这在这里是完全不相关的,但在lambda将被调用数百万次的情况下,这可能是一个有用的优化

  • 调用按钮的
    命令
    参数时没有参数

    使用一个参数调用事件绑定的处理程序,即事件本身

    两个lambda中的
    e=ents
    ,虽然在技术上是一个参数,但不要求或期望将任何实际参数传递给lambda;这只是一种捕获值以在lambda中使用的惯用方法。您可以轻松编写类似于
    lambda:fetch(ents)
    的内容。两个细微差别:

  • e=ents
    捕获定义lambda时
    ents
    的值,该值的任何后续更改都将被忽略。这在这里可能相关,也可能无关
  • 只查找一次值比每次调用lambda时稍微高效一些。这在这里是完全不相关的,但在lambda将被调用数百万次的情况下,这可能是一个有用的优化

  • 对于第二个问题,
    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))