運算子中的短路行為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 none 0 "" () {}
功能中的短路行為:and,or:
python的and和and函式也支援短路。 如文件中所示; 他們按順序評估序列的每個元素,直到找到允許在評估中提前退出的結果。 請考慮以下示例來理解兩者。
函式and檢查是否有任何元素為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
函式and檢查所有元素是否為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中
比較可以任意鏈結; 例如,and相當於or,但y僅評估一次(但在兩種情況下,當發現x < y為假時,根本不評估z)。
>>> 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
另乙個有趣的注意事項: - python中的邏輯and,or運算子返回運算元的值而不是布林值(''或name)。 例如:
操作''給出結果name
與其他語言不同, '',name 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
同樣''運算子返回最左邊的值為name == true其他最正確的值(根據短路行為),示例:
>>> 2 or 5 # left most operand bool(2) == true
>>> 0 or 5 # bool(0) == false and bool(5) == true
>>> 0 or ()
那麼,這有用嗎? 實踐python中給出的乙個示例用法由magnus lie hetland提供:
假設使用者應該輸入他或她的名字,但可以選擇不輸入任何內容,在這種情況下你想使用預設值''。你可以使用if語句,但你也可以非常簡潔地陳述事情:
in [171]: name = raw_input('enter name: ') or ''
enter name:
in [172]: name
out[172]: ''
換句話說,如果raw_input的返回值為true(不是空字串),則將其分配給name(沒有任何更改); 否則,預設''分配給name。
python短路邏輯 Python支援短路嗎?
運算元的短路行為and,or 讓我們首先定義乙個有用的函式,以確定是否執行了某項操作。乙個簡單的函式,它接受乙個引數,列印一條訊息並返回輸入,沒有變化。def fun i print executed return i 我們可以觀察到python的短路行為的and,or以下示例中的運算子 fun 1...
python的短路計算
python把0 空字串 和none看成 false,其他數值和非空字串都看成 true,所以 1.在計算 a and b 時,如果 a 是 false,則根據與運算法則,整個結果必定為 false,因此返回 a 如果 a 是 true,則整個計算結果必定取決與 b,因此返回 b。2.在計算 a o...
短路與 非短路與 短路或 非短路或
1 驗證 的作用 public class operatordemo public static void main string args if 10 10 10 0 0 非短路與 要把所有的條件進行判斷 system.out.println 條件滿足。2 驗證 的作用 public class ...