python短路邏輯 Python支援短路嗎?

2021-10-11 12:37:21 字數 2986 閱讀 7545

運算元的短路行為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 一休 愚公,我又碰到問題了,請看下面一...