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
謝謝!
uj5u.com熱心網友回復:
Event 是 lambda 函式的引數。換句話說,如果你定義
x = lambda a: a 10
你可以跑來x(10)獲取20。
另一方面,你不能這樣做
x = lambda: 10
x(10)
因為那個 lambda 函式沒有引數
發生錯誤是因為 tkinter 試圖將位置引數傳遞給不帶任何引數的 lambda 函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/486927.html
