Fork me on GitHub

  匿名函数,顾名思义即没有名称的函数,和def定义的函数的最大区别在于匿名函数创建后返回函数本身(即匿名函数不需要return来返回值),表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在Python中,我们利用关键词lambda创建匿名函数,以下是匿名函数lambda表达式的形式:

  lambda arg1,arg2,.....argn:expression

以下为一些lambda的特点:

  1. lambda 是一个表达式,而不是一个语句,即我们可以在任何可以使用表达式的场景一样使用lambda。
  2. lambda 的主体也是一个表达式,即和def定义的函数一样,lambda也有函数主体,不过lambda的主体仅仅是一个表达式,所以其使用的功能受到较大的限制。

  闲话少说,言归正传,还是栗子来的比较实惠:

匿名函数使用:

 1 #python3
 2 
 3 test1 = lambda :True
 4 # 切记这个是个函数,要加括号
 5 print(test1())
 6 
 7 test2 = lambda x: x + 1
 8 print(test2(2))
 9 
10 test3 = (lambda x, y: x + y)(3,4)
11 # 切记默认参数已经加了,这里不需要加括号
12 print(test3)

  测试结果:

True
3
7

   项目实战:

  最近运行一段函数的时候,出现一个错误:

t.timeout.connect(self.updateData())
TypeError: argument 1 has unexpected type 'NoneType'

修正结果:

 t.timeout.connect(lambda:self.updateData())

即可,原因是什么呢?

个人理解,这里使用了匿名函数可以的原因是这两个是不同的函数了,因为connect连接的是一个返回值,而self.updateData() 返回的是一个函数的返回值,是没有值,所以会上报这个错误,

这里还有一个解决方法,就是这样写也行了:

t.timeout.connect(self.updateData)

posted on 2019-08-14 09:23  虚生  阅读(333)  评论(0编辑  收藏  举报