• Python基础-Python的三元运算符和lambda表达式


     1、 Python的三元表达式:

        现在大部分高级语言都支持 “?”这个三元运算符,它对应的表达式如下:condition ? value if true:value if else 

        但是 Python并不支持三元运算符 ?,它替代的方法是 ...if ... else...

        Python的三元运算符不像其他语言的三元运算符,其他语言的三元运算符一般是下面所示的格式:

          判定条件?为真时的结果:为假时的结果

          例如:result=8>7?1:0

        然而,在Python中的格式为:

          为真时的结果  if  判定条件  else  为假时的结果

           例如:1 if 8>7 else 0

           输出1,如果8大于7,否则输出0

      

      下面咱们具体来看看什么是 三元运算符:

     1 >>> def f(x,y):
     2     return x-y if x>y else abs(x-y)
     3 #如果x大于Y,返回 x-y的值,否则就返回(x-y)的绝对值
     4 
     5 >>> f(5,6)   #因为x小于y,不满足if条件,它将返回 else里面的 绝对值
     6 1
     7 >>> f(6,5)  #因为6>5,满足if条件,将返回 6-5的值
     8 1
     9 >>> def f(x,y):
    10     return 1 if x>y else -1
    11 
    12 >>> f(5,6)
    13 -1
    14 >>> f(6,5)
    15 1
    16 >>> 

      2、Python的Lambda表达式

        lambda 函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的。如:

          

    '''命名的foo函数'''
    def foo():
        return "Hello"
    '''lambda关键字创建的匿名函数,该表达式同以上函数'''
    lambda:'Hello'

        上面只是简单的用lambda创建的一个函数对象,并没有保存它也没有调用它,时刻会被收回。下面我们保存并调用:

    f=lambda:'Hello'
    print(f())

        我们从上面的几个简单的例子,可以理解Python的语法为:

        lambda [arg1[,arg2,arg3...argN]]:expression

        lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号的右边是返回值。lambda语句构建的其实是一个函数对象。

    >>> print(lambda:'Hello')
    <function <lambda> at 0x00000000042BBB70>
    >>>

        lambda 如果没有参数,则lambda冒号前面就没有,如上面的例子。

        lambda有参数的情况:

        

    def add(x,y):
        return x+y
    add2=lambda x,y:x+y
    print(add2(4,5))   #运行结果是:9
    
    def sum(x,y=9):
        return x+y 
    sum2=lambda x,y=9:x+y
    print(sum2(6))   #运行结果是:15
    print(sum2(99,1))  #运行结果是:100

        lambda 有什么作用呢?

        很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。其实说的没错,lambda在Python这种动态的语言中  确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。同时,使用lambda的写法有时显得并没有那么pythonic。甚至有人提出之后的Python版本要取消lambda。

      回过头来想想,Python中的lambda真的没有用武之地吗?其实不是的,至少我能想到的点,主要有:

        1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

        2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

        3. 使用lambda在某些时候让代码更容易理解。

        4、非多次调用函数的情况下,lambda表达式即用即得,提高性能。

        lambda和def有什么不一样呢?

          1、Python lambda会创建一个函数对象,但不会把这个函数对象赋值给一个标识符,而def则会把函数对象赋值给一个变量.

          2、python lambda它只是一个表达式,而def则是一个语句。lambda表达式运行起来像一个函数,当被调用时创建一个框架对象

  • 相关阅读:
    Qt中的串口编程之一
    Qt Q_DECLARE_METATYPE说明——让自定义的类型设置到QVariant
    Qt中Pro文件变量详细说明
    C++/C语言的标准库函数与运算符的区别new/delete malloc/free
    View与Model绑定注意事项 (视图无数据显示)
    (五)Qt实现自定义模型基于QAbstractItemModel
    (四)Qt实现自定义模型基于QAbstractTableModel (一般)
    (三)使用预定义模型QDirModel的例子
    (二)使用预定义模型 QStringListModel例子
    (一) Qt Model/View 的简单说明
  • 原文地址:https://www.cnblogs.com/hq1015/p/6490721.html
Copyright © 2020-2023  润新知