• python做中学(八)匿名函数lambda的用法


      匿名函数,顾名思义即没有名称的函数,和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)

  • 相关阅读:
    SQLite数据库
    如何将大文件写入到数据库中
    Visual Studio 2008 附加进程调试
    VS2010MFC编程入门
    关于exe文件传递参数方法
    监视剪贴板数据
    Delphi快捷键
    判断一个对象是否存在, 谁更快
    全局探色器
    用DELPHI中实现RAR文件解压到指定一目录
  • 原文地址:https://www.cnblogs.com/dylancao/p/11349874.html
Copyright © 2020-2023  润新知