使用Python三目計算子的用法及短路邏輯方法介紹

高洛峰
發布: 2017-03-20 10:16:04
原創
1555 人瀏覽過

今天在看別人程式碼時看到這樣一種寫法, 感覺是個挺容易踩到的坑, 搞清楚後寫出來備忘.

短路邏輯

Python中進行邏輯運算的時候, 預設採用的是一種叫做短路邏輯的運算規則. 名字是很形象的, 下面直接看代碼

print True and 1
# 1
print True or 1
# True
print False and 1
# False
print False or 1
# 1
登入後複製

可以看到, 雖然1會被當做布林值計算, ​​但整個表達式的計算結果卻不一定是布林值, 而是根據表達式的不同而不同. 上面幾個表達式不同的結果, 就是短路邏輯. 用大白話講, 就是一旦Python能判斷整個表達式是True還是False, 就不會進行後續的計算了, 就是邏輯被短路了, 後續的表達式被忽略了.

比如True or 1的結果為True就是因為不管or後面是任何值, 整個式子的結果都必定是True, 所以Python看到True# , 看到or, 後面的1就不看了, 1被短路了, 返回了True; 同樣的False and 1也是一樣, 看到False然後是and不管後面是什麼, 整個式子的結果必定是False, 所以1被短路了, 回傳False .

對應的, 為什麼False or 1會回傳1, 就是因為Falseor判斷不了式子的結果, 整個式子是True還是False, 是由or後面的值來決定的, 所以Python要把整個式子看完, 所以返回1.

明白了什麼是短路邏輯之後,我們來看看三目運算子

三目運算子

#三目運算子, 又叫三元運算. 熟悉Java的同學可能會知道, 它的形式是這樣的b?x:y, 對於這個表達式來說, 如果條件bTrue, 那表達式的結果就是x, 如果bFalse, 那表達式的結果就是y. 這是一個很方便的寫法,比if語句簡潔很多.

但Python中早期沒有類似寫法的三目運算子, 所以就出現了一種利用短路邏輯, 用andor來模擬三目運算子的寫法, 下面我們看程式碼

A = X and 'table' or False
登入後複製

這句程式碼就是在利用短路邏輯模擬三目運算子, 當XTrue的時候, A會被賦值為'table', 當XFlase的時候, A會被賦值為False;

乍一看好像很不錯, 但這種寫法卻有個坑, 我們看這句代碼

True and 0 or 1
登入後複製

如果我們把剛才的寫法當三目運算子來使用, 那麼條件語句是True, 表達式應該返回0才是我們期望的結果, 但實際上這個表達式會傳回1; 因為True and 0的值為True, 整個表達式的值是由or之後的值決定的, 所以Python會對後面的值做判斷, 導致回傳了1, 這就是為什麼and...or這個寫法有坑的原因

#正確寫法

如果想在Python中使用三目運算子, 可以使用if...<a href="http://www.php.cn/wiki/111.html" target="_blank">else</a>寫法, 具體看程式碼

# <为真时的结果> if <判定条件> else <为假时的结果>0 if True else 1
登入後複製

if...else的寫法, 結果就會跟我們期望的相同, 當條件為True時, 返回前面的值, 條件為False時,傳回後面的值. 不會有坑, 只是寫的時候要注意, 條件和回傳值的順序跟Java中的三目運算子不同, 不要搞錯即可

以上是使用Python三目計算子的用法及短路邏輯方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板