今天在看別人程式碼時看到這樣一種寫法, 感覺是個挺容易踩到的坑, 搞清楚後寫出來備忘.
短路邏輯
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, 就是因為False
和or
判斷不了式子的結果, 整個式子是True還是False, 是由or
後面的值來決定的, 所以Python要把整個式子看完, 所以返回1.
明白了什麼是短路邏輯之後,我們來看看三目運算子
三目運算子
#三目運算子, 又叫三元運算. 熟悉Java的同學可能會知道, 它的形式是這樣的b?x:y
, 對於這個表達式來說, 如果條件b
為True
, 那表達式的結果就是x
, 如果b
為False
, 那表達式的結果就是y
. 這是一個很方便的寫法,比if語句簡潔很多.
但Python中早期沒有類似寫法的三目運算子, 所以就出現了一種利用短路邏輯, 用and
和or
來模擬三目運算子的寫法, 下面我們看程式碼
A = X and 'table' or False
這句程式碼就是在利用短路邏輯模擬三目運算子, 當X
為True
的時候, A
會被賦值為'table'
, 當X
為Flase
的時候, 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中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。