lambda回调函数

来源:互联网 发布:wpf编程宝典 源码 编辑:程序博客网 时间:2024/05/19 20:47

调用Python的lambda表达式会在运行时生成新的、未命名的函数对象。如果我们需要将其他传入的数据传递给处理器函数,就可以用lambda表达式延迟对处理器函数的调用,在此期间设定他需要的其他数据。

作用一:可用lambda表达式代替 def 函数

import sysfrom tkinter import *root=Tk()Button(root, text='test',
       command=(lambda: print('this is a test') or sys.exit())).pack()
root.mainloop()
lambda只能含有一个表达式,为了模拟原始脚本, 该段代码强制使用了一个or运算符来添加另一个表达式。
作用二:用lambda表达式和对象引用来延迟调用
    lambda可以将一个不带参数的函数调用映射到另一个由lambda提供参数的函数上,可以有效的延迟对真正回调处理器的调用。
    延迟的必要性在于,假如创建了一个Button部件,如果在按钮创建函数中编写处理器调用,而没有采用lambda或其他中间函数,回调会发生在按钮创建时,而不是按钮被按下时。
from tkinter import *root=Tk()def handler(name):    print(name)Button(root, text='lambda test', command=handler('spam')).pack()root.mainloop()                     #不好:现在运行回调!
使用lambda表达式来传递额外数据,用内联函数来定义延迟,将上述程序改为:
Button(root, text='lambda test', command=(lambda: handler('spam'))).pack()  #可以,打包在lambda中以延迟