• 补充知识:三元运算和逻辑运算


    一. 逻辑运算符和逻辑表达式

      逻辑表达式是用逻辑运算符和变量连接起来的式子。任何语言的逻辑运算符都一般分为3种——逻辑与、逻辑或和逻辑非。C、Java语言的逻辑运算符用&&、‖、!表示,Python采用and、or、not。下图列出了Python中的逻辑运算符和表达式。

    求结果:
        首先我们需要明白一点,在python中,Flase的值有:None,0 空列表,空字典,空元组,空字符串,自定义的对象实例,该对象的__bool__方法返回False,或__len__返回的0
    
    '''
        v1 = 1 or 3
         
        v2 = 1 and 3
       
        v3 = 0 and 2 and 1  
    
    v4 = 0 and 2 or 1   
    
    v5 = 0 and 2 or 1 or 4     
    
    v6 = 0 or False and 1      
        
    v1: 1为True,直接返回1
    v2: 1为真,返回3
    v3: 0为False,返回0,继续计算 0 and 1 ,返回 0
    v4: 0为False,返回0,继续计算 0 or 4,返回 4
    v5: 0为False,返回0,继续计算 0 or 1 ,返回1,继续计算 1 or 4 返回1
    v6 : 0为False,返回后面的False,继续计算False and 1 ,返回 False
    and:当a为True时,才计算b,否则返回a
    or:当a为Flase时,才计算b,否则返回a
    '''

    二. 三目运算(三元运算)

      三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(false)的条件判断,在Python 2.4以上才有了三元操作。它允许用简单的一行快速判断,而不是使用复杂的多行if语句。 这在大多数时候非常有用,而且可以使代码简单可维护。

    下面是一个伪代码和例子:

      伪代码:

    #如果条件为真,返回真 否则返回假
    condition_is_true if condition else condition_is_false

     例子:

    a = 0
    b = 1
    b =5 if a > 1 else  10
    print(b)  # 10
    
    # 如果a>1,则b=5,否则b=10

    三元运算另一种写法:

    伪代码:

    #(返回假,返回真)[真或假]
    (if_test_is_false, if_test_is_true)[test]

    例子:

    a = 1
    b =1
    res = (5,10)[a]
    print(res)  # 10

      上面的例子没有被广泛使用,而且Python玩家一般不喜欢那样,因为没有Python味儿(Pythonic)。这样的用法很容易把真正的数据与True/False弄混淆.另外一个不使用元组条件表达式的缘故是因为在元组中会把两个条件都执行,而 if-else 的条件表达式不会这样。

    condition = True
    print(2 if condition else 1 / 0)
    #输出: 2
    
    print((1 / 0, 2)[condition])
    #输出ZeroDivisionError异常

      这是因为在元组中是先建数据,然后用True(1)/False(0)来索引到数据。所以在建数据的时候,1/0 就报错,程序就终止了. 而if-else条件表达式遵循普通的if-else逻辑树, 因此,如果逻辑中的条件异常,或者是重计算型(计算较久)的情况下,最好尽量避免使用元组条件表达式。

    三元运算使用逻辑运算符来表示:

    x = 表达式 and y(真值返回) or z (假值返回)

    例子:

    a = 1
    b =2
    
    b = a > b and 5 or 10
    
    print(b)  # 10
  • 相关阅读:
    [转]linux下的fms2流媒体服务器搭建六部曲之四格式转换篇
    Linux 信号signal处理函数
    FMS在linux下安装时的问题处理
    Linux 下让你的C程序在后台运行
    Linux 信号signal处理机制
    Flash Media Server 2 无限制许可文件
    JavaScript动态控制网页元素事件
    自定义MessageBox的窗口颜色,字体等属性
    [转]linux下的fms2流媒体服务器搭建六部曲之一ffmpeg安装篇
    [转]linux下的fms2流媒体服务器搭建六部曲之三FlashMediaServer安装篇
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9268006.html
Copyright © 2020-2023  润新知