在Python 中,and 和 or 執行布爾邏輯演算
但是它們並不返回布爾值,而是返回它們實際進行比較的值之一
1. and
使用 and 時,在布爾環境中從左到右演算表達式的值。
如果布爾環境中的所有值都爲真,那麼 and 返回最後一個值。
否則返回第一個假的值
>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 'a' and 'b' and 'c'
'c'
2. or
使用 or 時,在布爾環境中從左到右演算表達式的值。
如果布爾環境中的所有值都爲假,那麼 or 返回最後一個值。
否則返回第一個真的值
>>> 'a' or 'b'
'a'
>>> '' or 'b'
'b'
>>> '' or () or {}
{}
3 and-or使用技巧
>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'
看起來是不是很像C語言中的 bool?a:b的三目運算
但是, 這其實和bool?a:b其實很不同, 如果a值爲假時, 表達式就不會按你希望的方式運行
>>> a = ""
>>> b = "second"
>>> 1 and a or b
'second'
要怎樣安全的使用這個技巧呢?
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]
""
由於 [a] 是一個非空列表,所以它決不會爲假。即使 a 是 0 或者 '' "或者其它假值,列表 [a] 也爲真,因爲它有一個元素。
也許有些人會困惑, if語句可以解決的問題,那爲什麼要經歷這些麻煩事呢?
在很多情況下,你要在兩個常量值中進行選擇,由於你知道 a 的值總是爲真,
所以你可以使用這種較爲簡單的語法而且不用擔心。
對於使用更爲複雜的安全形式,依然有很好的理由要求這樣做。
例如,在 Python 語言的某些情況下 if 語句是不允許使用的,比如在 lambda 函數中。