melon_15 2017-08-23 12:02 采纳率: 75%
浏览 1301
已采纳

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条回答 默认 最新

  • threenewbee 2017-08-23 15:53
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试