運算元的短路行為and, or:
讓我們首先定義乙個有用的函式,以確定是否執行了某項操作。乙個簡單的函式,它接受乙個引數,列印一條訊息並返回輸入,沒有變化。
>>> def fun(i):
... print "executed"
... return i
我們可以觀察到python的短路行為的and, or以下示例中的運算子:
>>> fun(1)
executed
>>> 1 or fun(1) # due to short-circuiting "executed" not printed
>>> 1 and fun(1) # fun(1) called and "executed" printed
executed
>>> 0 and fun(1) # due to short-circuiting "executed" not printed
注:直譯器認為以下值表示false:
false none 0 "" () {}
功能短路行為:any(), all():
python的any()和all()功能還支援短路.如docs所示,它們按順序計算序列的每個元素,直到找到允許在計算中早期退出的結果。考慮下面的例子來理解這兩種情況。
功能any()檢查是否有任何元素為true。一旦遇到true,它就停止執行,並返回true。
>>> any(fun(i) for i in [1, 2, 3, 4]) # bool(1) = true
executed
true
>>> any(fun(i) for i in [0, 2, 3, 4])
executed # bool(0) = false
executed # bool(2) = true
true
>>> any(fun(i) for i in [0, 0, 3, 4])
executed
executed
executed
true
功能all()檢查所有元素是否為true,並在遇到false時立即停止執行:
>>> all(fun(i) for i in [0, 0, 3, 4])
executed
false
>>> all(fun(i) for i in [1, 0, 3, 4])
executed
executed
false
連鎖比較中的短路行為:
此外,在python中
比較可以被任意鏈結。;例如,x < y <= z等於x < y and y <= z,除了y只計算一次(但在這兩種情況下)z時,則根本不進行評估。x < y被發現是假的)。
>>> 5 > 6 > fun(3) # same as: 5 > 6 and 6 > fun(3)
false # 5 > 6 is false so fun() not called and "executed" not printed
>>> 5 < 6 > fun(3) # 5 < 6 is true
executed # fun(3) called and "executed" printed
true
>>> 4 <= 6 > fun(7) # 4 <= 6 is true
executed # fun(3) called and "executed" printed
false
>>> 5 < fun(6) < 3 # only prints "executed" once
executed
false
>>> 5 < fun(6) and fun(6) < 3 # prints "executed" twice, because the second part executes it again
executed
executed
false
還有一點值得注意:-邏輯and, orpython中的運算子返回運算元的價值而不是布林(true或false)。例如:
操作x and y給出結果if x is false, then x, else y
與其他語言不同的是。&&, ||c中返回0或1的運算子。
例子:>>> 3 and 5 # second operand evaluated and returned
>>> 3 and ()
>>> () and 5 # second operand not evaluated as first operand () is false
() # so first operand returned
類似or運算子返回最左邊的值,其中bool(value) == true其他最正確的錯誤值(根據短路行為),示例:
>>> 2 or 5 # left most operand bool(2) == true
>>> 0 or 5 # bool(0) == false and bool(5) == true
>>> 0 or ()
那麼,這有什麼用呢?中給出的乙個示例使用實用python馬格努斯·利·赫特蘭:
假設使用者應該輸入他或她的名字,但是可以選擇不輸入任何內容,在這種情況下,您需要使用預設值''..您可以使用if語句,但也可以非常簡潔地說明:
in [171]: name = raw_input('enter name: ') or ''
enter name:
in [172]: name
out[172]: ''
換句話說,如果raw_input的返回值為true(而不是空字串),則將其賦值為name(不變);否則,預設''分配給name.
python 中的短路邏輯是什麼?
先說結論 從左到右,哪個可以得出結論就輸出哪個。短路邏輯規則如下 表示式從左至右運算 若 or 的左側邏輯值為 true 則直接輸出 or 左側表示式 若 or 的左側邏輯值為 false 則直接輸出or右側的表示式。若 and 的左側邏輯值為 false 則直接輸出 and 左側表示式 若 and...
java中短路與 邏輯與 短路或 邏輯或
created by cxh on 17 07 21.幾個名詞的定義和它們之間的區別 短路與 eg 條件1 條件2 執行過程 如果條件1成立,則繼續計算條件2 如果條件1不成立,則條件2不再計算,直接返回false.邏輯與 eg 條件1 條件2 執行過程 如果條件1成立,條件2繼續計算 如果條件1不...
啥叫 短路邏輯
if a and b 如果a是false,那麼跳過b的判斷,結果直接false if a or b 如果a為true,那麼跳過b的判斷,直接true not or and 的優先順序是不同的 not and or 比如 3 and 4 4,而 3 or 4 3 一休 愚公,我又碰到問題了,請看下面一...