1. 程式人生 > >補充知識:三元運算和邏輯運算

補充知識:三元運算和邏輯運算

round 玩家 邏輯運算 ror info 基於 列表 條件表達式 表示

一. 邏輯運算符和邏輯表達式

  邏輯表達式是用邏輯運算符和變量連接起來的式子。任何語言的邏輯運算符都一般分為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

補充知識:三元運算和邏輯運算