Python學習之and-or操作使用技巧

本文主要介紹了python and or使用的一些小技巧

在python中 and 和 or 執行布爾邏輯運算,但是他們並不返回布爾值,而是返回他們實際進行比較的值之一。

'a' and 'b'  這個返回 ‘b’
使用 and 時, 從左到右計算表達式的值。 0、''、[]、()、{}、None 在布爾環境中爲假;其它任何東西都真。
在這個例子中  and  計算 ‘a’ 的值爲真,然後 是計算 ‘b’的值也爲真,最終返回 ‘b’ 這個值。

'' and 'b'
如果布爾環境中的某個值爲假,則 and 返回第一個假值。在這例子返回第一個假值。在這例子中, '' 是第一個假值。 

'a' and 'b' and 'c' 
所有值都爲真,返回最後一個真值,返回最後一個真值,'c'。
'a' or 'b'
使用 or 時,計算從左往右,如果有一個值爲真,or立刻返回該值,本例中‘a’是第一個真值。

'' or 'b'


'' or [] or {}



def sidefx():
	print "in sidefx()"
	return 1
'a' or sidefx()
注意 注意 or 在布爾環境中會一直進行表達式計算直到找第個真值,然後就會忽略剩餘的比較值,如果某些值有副作用,例如這裏的函數sidefx就不會被調用了。


>>> a = "first"
>>> b = "second"
>>> 1 and a or b (1)
'first'
這個語法看起來類似於 C 語言中的 語言中的 語言中的 bool ? a : b 表達式。 整個從左到 右計算, 所以先and 表達式 。
1 and 'first'  值爲  'first',   然後 'first' or 'second' 的值爲 'first'。

>>> 0 and a or b (2)
'second'
0 and 'first' 值爲 False,然後 0 or 'second' 值爲 'second'


>>> a = ""
>>> b = "second"
>>> 1 and a or b 
'second'
像這樣的 and 後面的 a  是一個假值,最後返回的是 b 值,並不是我們期望的效果。(我們期望是 and前面的值的真假 來控制
最後返回是 or 左邊 還是 or 右邊的值,真的情況返回左邊的值,假的情況返回右邊的值。)

processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
像這樣的,and後面哪個表達式是一個lambda,不會是假的,這樣就可以通過 collapse變量的真假來 決定最後返回的是
or哪邊的lambda表達式。

這種方式就是把一個判斷從一個函數中摘取出來,通過這個判斷來決定使用哪個函數,這樣更爲高效。
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0] (1)
''
這裏我們可以採用列表來強制的把or兩邊的值都設置成真值。這樣我們可以根據 and 前面的值 來決定 最後表達式的值拉。

這裏其實我們就是想 模仿 一個 bool ?  a : b  這樣的一個效果。

這裏在python中我們可以使用 if else 來做的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章