lambda 事件:做什么?

What does lambda event: do?

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

谢谢!

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

x = lambda a: a+10

您可以 运行 x(10) 得到 20.

另一方面,你不能

x = lambda: 10
x(10)

因为那个 lambda 函数没有参数

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