' Lambda格式'之间究竟有什么区别?

时间:2014-10-10 17:07:15

标签: python object lambda argument-passing

首先,我是Python的初学者,所以准备好迎接一个不起眼的问题))

在本网站的一个主题中,我发现了一些关于lambda函数使用的建议。

这是纠正之前的代码:

def entree1(self):                    #function that is supposed to change text in 
self.configure(text = "X")              the label block from whatever it is to 'X'

fen = Tk()

pole1 = Label(fen, text = '|_|')
pole1.bind("<Button-1>", lambda: entree1(pole1))         #event handler reffering to the function above

这是纠正后的代码:

def entree1(self):                    #function that is supposed to change text in 
self.configure(text = "X")              the label block from whatever it is to 'X'

fen = Tk()

pole1 = Label(fen, text = '|_|')
pole1.bind("<Button-1>", lambda x: entree1(pole1))          #event handler reffering to the function above

简而言之,我将 lambda:some func 更改为 lambda x:some func

虽然我无法弄清楚这两种变体之间的区别,但它很有效。 在我添加 x 后,您能否告诉我究竟有什么变化?

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

让我将lambda表达式转换为您可能更习惯的函数定义:

lambda : entree1(pole1)

相同
def lambdaFunc():
    global pole1
    return entree1(pole1)

您的更正功能是

lambda x : entree1(pole1)

相同
def lambdaFunc(x):
    global pole1
    return entree1(pole1)

你需要额外的参数,因为Tk按钮用变量调用它们绑定的函数(我完全忘记变量是什么),因此当不带一个输入变量时调用一个带有输入变量的函数会导致错误。