melon_15
melon_15
采纳率75%
2017-08-23 12:02

python 里lamda函数的疑问

已采纳

正在练习tkinter。
里面command的参数传递我有一个疑问

以这篇文章为例http://blog.csdn.net/tinym87/article/details/6957438

 def handler(a, b, c):  

    print "handler", a, b, c  


if __name__=='__main__':  
    root = Tkinter.Tk()  
    # 通过中介函数handlerAdapotor进行command设置  
    btn = Tkinter.Button(text=u'按钮',** command=lambda : handler(a=1, b=2, c=3)**) 
    btn.pack()  
    root.mainloop()  

我的疑问是,为什么加粗的部分不直接写出command=handler(a=1, b=2, c=3)呢?

当然我试了类似的写法会报错。但是我看不出原因。

我去翻了书确认一下概念但是更疑惑了。

<函数名>:lambda<参数列表>:<表达式>等价于
def <函数名>(<参数列表>):
return <表达式>

那么如果写command=lambda : handler(a=1, b=2, c=3),不就是只有定义没有调用吗?为什么反而这样是对的?
谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 4年前

    对,lambda定义了函数,作为参数,传给另一个函数让它来调用。如果自己调用,就不用lambda了。这种自己定义人家调用的写法,也叫作回调(callback)

    点赞 评论 复制链接分享