三元表达式

Zss 发表于:

有的时候需要下写一下简单的判断语句,但是不想if else写很多行,看着不是很简洁,所以使用到三元表达式就可以很好的解决

譬如说在一些url的构造的时候需要做一些判断来生成不同的url,可以使用三元表达式来一行实现

a = 3
b = 5
c = a-b if a+b<10 else a+b
print c
第一种:基本的规则:变量 =(ture的表达式)if(判断条件)else(false的表达式)

可以直接将结果赋值于变量  或者 直接执行表达式即可

表达式可以再次嵌套三元表达式

括号可以有可以没有,不过写上括号变得更加清晰

a = 3
b = 5
c = (a if a+b<10 else b) if a>b else (a if a-b<2 else b)
c = a if a+b<10 else b if a>b else a if a-b<2 else b
print c

或者这么来写

c = (a-b,b+a)[a+b<10]
a = 3
b = 5
c = (a-b,b+a)[a+b<10]
d = a-b if a+b<10 else a+b
print c,d
输出:
8 -2

可以看出这种书写的方式和第一种的表达式反了

第二种:所以它的格式为:(false的表达式,ture的表达式)[ 判断表达式 ]
c = (a-b if a+b<10 else a+b,a-b if a+b<10 else a+b)[a+b<10]
c = ((a,b)[a>b],(a,b)[a<b])[a+b<10]

这种方式叫做元组表达式

condition = True
print(2 if condition else 1 / 0)

print((1 / 0, 2)[condition])

输出:
Traceback (most recent call last):
2
  File "C:/Users/Zss-pc/Desktop/Py/Flask/package/Date_Exporting.py", line 5, in <module>
    print((1 / 0, 2)[condition])
ZeroDivisionError: integer division or modulo by zero

以上第一个表达式正常输出,因为斌没有执行到false(1/0),但是元组表达式报错,因为先执行到结果的表达式

在元组中会把两个条件都执行,而 if-else 的条件表达式不会这样

在元组中是先建数据,然后用True(1)/False(0)来索引到数据。 而if-else条件表达式遵循普通的if-else逻辑树

因此,如果逻辑中的条件异常,所以进行大量数据计算时,最好不要使用元组表达式