[轉]python條件表達式的四種實現方法 和 and、or 的計算規則


a, b, c = 1, 2, 3
 
# 1.常規
if a>b:
    c = a
else:
    c = b
 
# 2.表達式
c = a if a>b else b    # 先執行中間的if,如果返回True,就是左邊,False是右邊。
 
# 3.二維列表
c = [b,a][a>b]    #實際是[b,a][False],因為False被轉換為0,所以是[1,2][0],也就是[1]
                        # False返回第一個,True 返回第一個。
 
# 4
c = (a>b and [a] or [b])[0]
# 這個比較好玩,False and [1] or [2],因為and的優先級高於or,先算and
# False和[1] and之后還是False,和[2]or之后卻成了[2]
# True 和[1] and之后是[1],[1]和[2]or結果是[1]
# 也就是False和True在和別人做boolean運算的時候,根據and還是or,F和T在前在后有不一樣的數據轉換規則。
---------------------
作者:lobbiy
來源:CSDN
原文:https://blog.csdn.net/bcs_01/article/details/79373322

Python 里 and、or 的計算規則

轉自:https://www.cnblogs.com/huchong/p/7535542.html

引子:

>>> 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