python and和or

and 是返回第一個假值,若是都爲真,則返回最後一個真值,而後就會忽略其他的比較值安全

or 是返回第一個真值,若是都爲真,則返回第一個真值,而後就會忽略其他的比較值函數


0、''、[]、()、{}、None 在布爾上下文中爲;其它任何東西都爲真spa

使用 and-or 技巧orm

例 and-or 技巧介紹
>>> a = "first"ci

>>> b = "second"字符串

>>> 1 and a or bit

'first'form

>>> 0 and a or btransform

'second'
這個語法看起來相似於 C 語言中的 bool ? a : b 表達式。整個表達式從左到右進行演算,因此先進行 and 表達式的演算。 1 and 'first' 演算值爲 'first',而後 'first' or 'second' 的演算值爲 'first'。
0 and 'first' 演算值爲 False,而後 0 or 'second' 演算值爲 'second'。lambda

然而,因爲這 種 Python 表達式單單只是進行布爾邏輯運算,並非語言的特定構成,這是 and-or 技巧和 C 語言中的 bool ? a : b 語法很是重要的不一樣。若是 a 爲假,表達式就不會按你指望的那樣工做了。(你能知道我被這個問題折騰過嗎?不僅一次?)


例 and-or 技巧無效的場合
>>> a = ""

>>>b = "second"

>>> 1 and a or b        

'second'
因爲 a 是一個空字符串,在 Python 的布爾上下文中空字符串被認爲是假的,1 and '' 的演算值爲 '',最後 '' or 'second' 的演算值爲 'second'。噢!這個值並非你想要的。

and-or 技巧,bool and a or b 表達式,當 a 在布爾上下文中的值爲假時,不會像 C 語言表達式 bool ? a : b 那樣工做。

在 and-or 技巧後面真正的技巧是,確保 a 的值決不會爲假。最經常使用的方式是使 a 成爲 [a] 、 b 成爲 [b],而後使用返回值列表的第一個元素,應該是 a 或 b中的某一個。


例 安全使用 and-or 技巧
>>> a = ""

>>> b = "second"

>>> (1 and [a] or [b])[0]

''
因爲 [a] 是一個非空列表,因此它決不會爲假。即便 a 是 0 或者 '' 或者其它假值,列表 [a] 也爲真,由於它有一個元素。

到如今爲止, 這個技巧可能看上去問題超過了它的價值。畢竟,使用 if 語句能夠完成相同的事情,那爲何要經歷這些麻煩事呢?哦,在不少狀況下,你要在兩個常量值中進行選擇,因爲你知道 a 的值老是爲真,因此你可使用這種較爲簡單的語法並且不用擔憂。對於使用更爲複雜的安全形式,依然有很好的理由要求這樣作。例如,在 Python 語言的某些狀況下 if 語句是不容許使用的,好比在 lambda 函數中。

注:這裏因爲語句是從左向右解釋的。咱們能夠這樣的來理解。

概括一下:
and語句:
0 and * 不須要再考慮*是0仍是1,結果是0
1 and * 須要考慮*是0仍是1來決定結果。

or語句: 1 or * 不須要考慮後面的*,結果爲1 0 or * 須要考慮後面的*來決定結果

相關文章
相關標籤/搜索