lambda event: 有什么作用?

问题描述 投票:0回答:2

lambda:
lambda event:
有什么区别。我做了一些研究,但仍然无法找出差异。

考虑这段代码:

import tkinter as tk

root = tk.Tk()

r = 0

def func(n):
    r = n

#works
b1 = tk.Button(root, text='1')
b1.bind('<Button-1>', lambda event: func(1))
b1.pack()

#does not work
b2 = tk.Button(root, text='2')
b2.bind('<Button-1>', lambda: func(2))
b2.pack()

tk.mainloop()

为什么按钮 2 可以工作而按钮 1 却不起作用?具体来说,我收到此错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: <lambda>() takes 0 positional arguments but 1 was given

谢谢!

python tkinter lambda
2个回答
2
投票

Event 是 lambda 函数的参数。换句话说,如果你定义

x = lambda a: a+10

您可以运行

x(10)
来获取
20

另一方面,你不能这样做

x = lambda: 10
x(10)

由于 lambda 函数不带参数

发生错误是因为 tkinter 尝试将位置参数传递给不接受任何参数的 lambda 函数。


0
投票

因为,[lambda 事件] 将键连接到特定函数,并且只有当您在程序中时才能访问该键。强调文本

© www.soinside.com 2019 - 2024. All rights reserved.