python短路與 Python支援短路嗎?

2021-10-21 07:03:37 字數 2733 閱讀 1283

運算子中的短路行為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 ...