python使用3目運算子

2021-06-12 12:20:21 字數 1469 閱讀 8906

**:

c、c++都大家都熟悉三目運算子

c?x:y

實際上python中可以這麼使用:

(1)result=(x

在c語言中,三目運算經常用到(cond?a:b),非常的簡潔,而在python中不支援這種語法。

但是,可以用python中and or來實現(這裡是有陷阱的,下面會講到)

我們來看下面幾個表示式

>>> false or 1 1

>>> false or 0 0

>>> true or 0

true

>>> true and 1 1

>>>true and 0 0

>>> false and 1

false

也就是說,and or這個表示式會返回乙個最終的表示式結果,而不是簡單的true或者false。那麼看如下幾個表示式:

>>> true and 1 or 2   #true?1:2 1

>>> false and 1 or 2 #true?1:2 2

這是不是很像三目運算的結果呢?

這裡你也許會想到文章開始的三目表示式可以這樣表示

>>> cond and a or b

是的,在大多數情況下這個表示式都是正確的,但是上面提到的陷阱也在這裡出現了

>>> cond, a, b = true, 0, 1 #這樣賦值後

>>> cond and a or b         #這個表示式的結果會是什麼呢?

1                                      #也就是b,而不是你預想的a

這是因為,在 and or運算中 空字串 『』,數字0,空列表,空字典{},空(),none,在邏輯運算中都被當作假來處理,如下面這個例子

>>> 'sss' and '' or 'bbb' 

'bbb'

但是,不要擔心,還是有辦法的。

在的文章《

和c語言三目運算子完全等價的表示式》中給出了如下表達方式

>>> c = cond and a or (not cond or a) or b #貌似有點太複雜了

在dive into python 中給出這樣乙個方法:

>>> (1 and [a] or [b])[0]   #也就是 (cond and [a] or [b])[0]

因為,即使 a或者b為乙個邏輯假的值,將他放入集合中後,就為假了,也就是[false] [none]都不為假。

此外,我認為還可以這樣實現

>>> (b, a)[cond and 1 or 0] #這種方法需要主意的地方就是,tuble中a和b的位置是顛倒的

另,在「深圳夜歸人」的

文章裡給出了,用dict的一種方式

>>> max_ab = [a > b]

但是這種方法沒有普適性,因為cond的取值不一定為true false

所以建議使用dive into python的方法,或者我的方法

python3運算子 Python3 運算子

python3 運算子 python3 支援以下型別運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 算術運算 a b 2,3 運算子說明 示例加 將兩個物件相加 a b 結果 5 減 將兩個物件相減 a b 結果 1 乘 將兩個物件相...

python3運算子 Python3運算子

什麼是運算子?本章節主要說明python的運算子。舉個簡單的例子 4 5 9。例子中,4 和 5 被稱為運算元,稱為運算子。python語言支援以下型別的運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 接下來讓我們乙個個來學習pyth...

Python 三目運算子

python可以通過if 語句來實現三目運算子的功能,因此可以把這種if語句當做三目運算子,具體語法格式如下 返回true執行 if 表示式 else 返回false執行例 a 返回true執行 if 3 4 else 返回false執行 print a 執行結果 返回false執行實際上,如果只是...