1. 程式人生 > >Python3 三目運算子

Python3 三目運算子

Python 中沒有像 C 語言中一樣直接使用 x?a:b 這樣的三元表示式,但是它有兩種替代方法:

方法一

a if x else b

如果 x 為 True,返回 a;否則返回 b

>>> 'True' if 2 > 1 else 'False'
'True'
>>> 'True' if 2 < 1 else 'False'
'False'
>>> 

方法二

利用 and or 短路運算的特點

and 運算時,例如 a and b,如果 a 為 False 就不再判斷b的值。

or運算時,例如 a or b,如果 a 為 True 就不再判斷 b 的值。

假設表示式為:x and a or b。如果 x 為 True,會接著判斷 a,如果 a 等同True,就返回 a 的值。

如果 a 等同 False,就計算 b,返回 b 的值。如果你覺得有點繞,直接看下面的例子:

>>> 2 > 1 and 'True' or 'False'
'True'
>>> 2 < 1 and 'True' or 'False'
'False'

但這種方法有個坑,如果 a 為 "",即空串,對它作真假值判斷時會返回 False,與我們的假設不符。

>>> 2 > 1 and '' or 'False'
'False'

這種方法看起來挺優雅,看在它優雅的份上,能不能補救一下呢?

當然,機智的網友找到了修補的方法,那就是把 a 和 b 用列表包起來。因為即使包含空串元素的列表,其表示式依然等同 True

上面的例子包裹後變成下面這幅德行:

>>> (2 > 1 and [''] or ['False'])[0]
''
>>> 2 > 1 and [''] or ['False']
['']
可以看到,這種方法是多麼地醜陋。構造了兩個列表不說,最後還得依賴下標運算把想要的值取出來。

所以推薦使用第一種方法。比較好理解,也沒有坑。