Python三目運算and or要注意的問題

2021-09-12 13:34:52 字數 1047 閱讀 6757

python中三目運算有兩種實現方式,其中一種是通過and、or來實現的。通常情況下都可以正常的返回期望的值。但是在期望返回布林型別有乙個要注意的問題。

and、or的實現方式,實際上是利用邏輯運算子的短路原則實現的。短路原則簡單來說就是在多個邏輯運算子組合的表示式中,用and關聯的兩個元素,如第乙個元素為假,那麼與之關聯的另乙個元素則不會進行計算,同理,用or關聯的兩個元素,如第乙個元素為真,那麼與之關聯的另乙個元素則不會進行計算。

在python中任何物件都可以用來測試真值,以下6種情況會判定為假:

1.none。

2.false。

3.任何數值型別的0。

4.任何空序列,''、()、。

5.任何空對映,{}。

6.使用者自定義類的例項,如果類定義了__bool__或__len__方法,當方法返回0或布林型別false時。

所以,當使用and、or進行三目運算並期望返回布林型別值或空序列、對映時如果不做特殊處理就會出現異常結果。

以簡單的返回數值為例:

當返回的值為非0值時,可以得到期望的值,如下value為1。

value= true and 1 or 2
而如果希望在條件判定為true時返回0,若不做特殊處理則不會返回0,而是2。因為0真值為false,與true做與操作後不會短路,而是與or繼續進行運算,從而返回2。如下value為2,而不是0。

value= true and 0 or 2
通過將期望的返回值放入列表或元組中, 就可以得到期望的值,如下將期望的返回值0和2分別放入列表中,三目運算會返回列表[0],然後在通過下標0將期望值取出,就可得到0。

value = (true and [0] or [2])[0]
也可以放入元組中,效果相同。

value = (true and (0,) or (2,))[0]
在三目運算表示式返回值為函式呼叫等返回值不確定的情況下,通過這種特殊處理,可以防止期望返回值真值測試為假時造成返回錯誤值的情況發生。

Python 三目運算

python 可通過 if 語句來實現三目運算的功能,因此可以近似地把這種 if 語句當成三目運算子。作為三目運算子的 if 語句的語法格式如下 true statements if expression else false statements 三目運算的規則是 先對邏輯表示式 expressi...

Python 三目運算

python 可通過 if 語句來實現三目運算的功能,因此可以近似地把這種 if 語句當成三目運算子。作為三目運算子的 if 語句的語法格式如下 true statements if expression else false statements 三目運算的規則是 先對邏輯表示式 expressi...

python 三目運算

首先確定三目運算的使用條件,if只有兩個才能用三目 只有 if else 先寫個if else的小例子 if push lpush self.conn.lpush self.key,list elif push rpush self.conn.lpush self.key,list 那麼運用三目運算...