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

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

  逻辑表达式是用逻辑运算符和变量连接起来的式子。任何语言的逻辑运算符都一般分为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逻辑树, 因此,如果逻辑中的条件异常,或者是重计算型(计算较久)的情况下,最好尽量避免使用元组条件表达式。

猜你喜欢

转载自www.cnblogs.com/lovepy3/p/9268006.html