Python 里 and、or 的計算規則


引子:

>>> print '' or 5 or 0
5
>>> print 5 and 4
4
>>> print '' or 5 or 0 and 4
5

出現以上情況的原因是什么呢?

 

 

bool('') == False bool(0) == False
所有變量的位操作都是通過強制轉換成bool實現的,並且表達式的值是從左到右第一個能夠確定表達式的值的變量。
例如 (‘’ or 5 or 0)==(False or True or False),當遇到第一個True的時候,表達式的值等於True這個變量(5)的值,並且不會再去管后面是什么,所以返回5.

 

1. 在純and語句中,如果每一個表達式都不是假的話,那么返回最后一個,因為需要一直匹配直到最后一個。如果有一個是假,那么返回假
2. 在純or語句中,只要有一個表達式不是假的話,那么就返回這個表達式的值。只有所有都是假,才返回假
3. 在or和and語句比較難表達,總而言之,碰到and就往后匹配,碰到or如果or左邊的為真,那么就返回or左邊的那個值,如果or左邊為假,繼續匹配or右邊的參數。

(False or 1)  輸出1

  (1 or False)    輸出1

(True or 1)輸出前者

  (1 or True)   輸出前者

(True and 1) 輸出后者

  (1 and True)    輸出后者

False and 1)輸出False

  (1 and False)  輸出False

 

 

 

對python而言

其一, 在不加括號時候, and優先級大於or

其二, x or y 的值只可能是x或y. x為真就是x, x為假就是y

第三, x and y 的值只可能是x或y. x為真就是y, x為假就是x

顯然,

對於, 1 or 5 and 4: 先算5 and 4, 5為真, 值為4. 再算1 or 4, 1 為真,值為1

對於, (1 or 5) and 4: 先算1 or 5, 1為真, 值為1. 再算1 and 4, 1為真,值為4

 

在Python中,空字符串為假,非空字符串為真。非零的數為真。

數字和字符串之間、字符串之間的邏輯操作規律是:

對於and操作符:

只要左邊的表達式為真,整個表達式返回的值是右邊表達式的值,否則,返回左邊表達式的值

對於or操作符:

只要兩邊的表達式為真,整個表達式的結果是左邊表達式的值。

如果是一真一假,返回真值表達式的值

如果兩個都是假,比如空值和0,返回的是右邊的值。(空值或0)

總結一句話就是:無論操作符是哪個,最后的結果一定是按照計算順序能最快判斷出結果的那個表達式決定的

舉例:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM