基本上我只是想知道如果没有使用lambda这段代码会是什么样的。
bttn_0 = Button(calc, text = "0")
bttn_0["command"] = lambda: sum1.num_press(0)
bttn_0.grid(row = 4, column = 1, pady = 5)
我知道它会开始作为def的东西,但我会在将要发生的事情上迷失方向。你可能想知道我为什么这么问。好吧,我试图弄清楚lambda的使用以及如何在编码中更有效地使用它,但我首先需要知道如何从没有lambda的原始def函数实现它。我希望这是有道理的。我知道lambda是最快的方法,但正如我所说的,我仍然对学习简化编码感兴趣,并且需要原始的方法才能做到这一点。
感谢您的帮助!
答案 0 :(得分:2)
唯一有意义的其他选择是传递命名函数:
def command_handler():
return sum1.num_press(0) # or without the return
bttn_0["command"] = command_handler
但是没有区别,而且我认为lambda看起来好多了(虽然有些人喜欢因为风格或品味的原因而避免使用它们) - 你需要传递一个可调用的,并且是唯一的方法来定义一个callable是一个lambda或一个函数。
从技术上讲,第三个选项是一个带有__call__
方法的对象,但到目前为止这是一个矫枉过正,所以我只是为了完整性而展示它:
class CmdHandler(object):
def __call__(self):
return sum1.num_press(0)
bttn_0["command"] = CmdHandler()
答案 1 :(得分:1)
考虑以下两个例子:
如果没有lambda表达式,如果要打印数字(例如),则每个Button需要不同的函数:
def number_0():
print 0
def number_1():
print 1
Button(calc, text='0 named function', command=number_0).pack()
Button(calc, text='1 named function', command=number_1).pack()
但是,使用lambda表达式,您可以从Button传递参数,并且可以大大减少代码中的行数:
def num_press(n):
print n
Button(calc, text='0 with lambda', command=lambda: num_press(0)).pack()
Button(calc, text='1 with lambda', command=lambda: num_press(1)).pack()