摘要:問題出現中的,運算,可以寫出比較復雜的演算表達式看了一些大神的演算規則解釋,覺得不是很好理解,有些人甚至理解錯了規則。特殊情況當表達式的所有值都是真值,并且運算符不全部一致,那么第一個或演算完后直接返回。
問題出現:
Python 中的 or,and 運算,可以寫出比較復雜的演算表達式; 看了一些大神的演算規則解釋,覺得不是很好理解,有些人甚至理解錯了規則。 這里聊一下自己的理解。
其他人是怎么做的:
先看兩個例子熱下身: return 1 or 2 return 1 and 2 兩元的 or and 運算可以通過死記來掌握: 如果有一個值為真,or 立刻返回第一個真值; ...... 如果你記得兩元的 or,and 運算規則,你肯定知道正確答案: return 1 or 2 # 返回 1 return 1 and 2 # 返回 2 個人不推薦死記,因為容易忘記和甚至弄混淆。
可以這樣理解:
Python 中, or 可以理解為找真值演算,從左到右發現真值就返回真值; 如果兩個都是假值,那就返回最后一個假值。 and 可以理解為找假值演算,從左到右發現假值就返回假值; 如果兩個都是真值,那就返回最后一個真值。 演算規則簡單歸納一下就是: or :找真值: 如果有一個值為真,or 立刻返回第一個真值; 如果所有值都為假,or 返回最后一個假值。 and :找假值: 如果有一個值為假,and 立刻返回第一個假值; 如果所有值都為真,and 返回最后一個真值。
分析:
先來看比較難搞的三元演算表達式的例子: return 0 and 1 or 2 相信你也發現了,三元的運算可以拆分成兩個兩元的運算表達式: return 0 and 1 or 2 中: 0 and 1 :找假值,返回 0; 然后把返回的 0 繼續和后面的表達式做演算: 0 or 2 :找真值,返回 2。 所以: return 0 and 1 or 2 :# 返回 2 就是這么簡單。 當然,這還沒完! 還有一種特殊情況需要分析。
特殊情況分析:
當表達式的所有值都是真值,并且運算符不全部一致, 那么第一個 or 或 and 演算完,直接返回。 舉兩個梨子: return 1 or 2 and 3 : 1 or 2:找真值返回1;因為全部值都是真值,且運算符不全部一致,直接返回。 return 1 and 2 or 3 中: 1 and 2:找假值返回2;因為全部值都是真值,且運算符不全部一致,直接返回。 所以: return 1 or 2 and 3 :# 返回 1 return 1 and 2 or 3 :# 返回 2
特殊情況的反面:
可能會有人有疑問: 既然全部值都為真值,且運算符不全部一致的時候,只算第一個 or 或 and , 那么全部值都為假值,且運算符不全部一致的話,是不是也只算第一個 or 或 and 呢! 答案是否定的。 我們來驗證一下: return "" or 0 and None 上面的結果返回的是 0; return "" and None or 0 上面的結果返回的是 0; 那么全部值為真值,且運算符全部一致的時候呢: return 0 and None and "" 上面的結果返回的是 0; return "" or None or 0 上面的結果返回的是 0; 所以,就算值都是假值,也要老老實實做運算,別想著運算第一個 or 或 and 就完事了。
練習一下:
二元運算: return 1 or 0 return 1 and 0 return 1 or 2 return 1 and 2 三元運算: return 1 or 2 or 3 return 1 and 2 and 3 注意:上面兩個表達式的值全部為真值,但是表達式的演算符號相同。 四元運算: return "" and None or 0 and 1 (參考答案預警!你不打算在心里演算一下么?)
參考答案:
return 1 and 0 :# 返回 0 return 1 or 0 :# 返回 1 return 1 or 2 :# 返回 1 return 1 and 2 :# 返回 2 return 1 or 2 or 3 :# 返回 1 return 1 and 2 and 3 :# 返回 3 return "" and None or 0 and 1 :# 返回 0
小結:
or :找真值: 如果有一個值為真,or 返回第一個真值; 如果所有的值都為假,or 返回最后一個假值。 and :找假值: 如果有一個值為假,and 返回第一個假值; 如果所有的值都為真,and 返回最后一個真值。 特殊情況: 當表達式的所有值都是真值,并且運算符不全部一致, 那么第一個 or 或 and 演算完后直接返回。
傳送門:http://blog.51cto.com/1350814...
本文系筆者原創
轉載請注明出處
—————————————
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42778.html
摘要:相信很多人在格式化字符串的時候都用的語法,提出一種更先進的格式化方法并成為的標準用來替換舊的格式化語法,從開始已經實現了這一方法其它解釋器未考證。 showImg(https://segmentfault.com/img/remote/1460000018650325); 相信很多人在格式化字符串的時候都用%s % v的語法,PEP 3101 提出一種更先進的格式化方法 str.for...
摘要:縮進不一致,會導致運行錯誤。變量變量在使用前必須先定義即賦予變量一個值,否則會報錯數據類型布爾只有和兩個值,表示真或假。 簡介 Python 是一種高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python 由 Guido van Rossum 于 1989 年底在荷蘭國家數學和計算機科學研究所發明,第一個公開發行版發行于 1991 年。 特點 易于學習:Python ...
摘要:同樣的方法名稱,參數列表,返回類型,拋出的異常或者是父類拋出的異常的子類,子類重寫一個。使用方法過載的目的,根據調用時的實參表與形參表,來選擇對應的方法體的。 問題出現: 即使對于一個經驗豐富的開發人員來說,方法重載和方法覆蓋的區別都能讓他猶豫一下, 對于新手來說,經常容易弄混淆。 有沒有比較深入淺出的理解方式,能讓人過目不忘,用起來還能有條件反射般的速度呢? 其他人是怎么做的: 寫...
閱讀 1338·2021-11-15 11:37
閱讀 2218·2021-09-23 11:21
閱讀 1305·2019-08-30 15:55
閱讀 2111·2019-08-30 15:55
閱讀 2820·2019-08-30 15:52
閱讀 2823·2019-08-30 11:12
閱讀 1579·2019-08-29 18:45
閱讀 1893·2019-08-29 14:04