**:
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執行實際上,如果只是...