AND:
布爾環境中的所有值都為真,那麼and返回最後一個值
布爾環境中的某個值為假,則and返回第一個假值。
OR:
如果有一個值為真,or立刻返回該值
如果所有的值都為假,or返回最後一個假值。
<應用的實際例子>
processFunc = collapse and ( lambda s: " " .join(s.split())) or ( lambda s: s)
processFunc現在是一個函數,但是它到底是哪一個函數還要取決於collapse變量。如果collapse為真,processFunc ( string )將壓縮空白;否則processFunc ( string )將返回未改變的參數。
collapse =1 -> ( lambda s: " " .join(s.split()))
collapse =0 -> ( lambda s: s)
導航:起始頁 > Dive Into Python > 自省的威力 > and和or的特殊性質 | << >> | ||||
深入Python :Dive Into Python 中文版Python 從新手到專家[Dip_5.4b_CPyUG_Release] |
在Python中,and和or執行布爾邏輯演算,如你所期待的一樣。但是它們並不返回布爾值,而是返回它們實際進行比較的值之一。
例4.15. and介紹
>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'
使用and時,在布爾環境中從左到右演算表達式的值。0、''、[]、()、{}、None在布爾環境中為假;其它任何東西都為真。還好,幾乎是所有東西。默認情況下,布爾環境中的類實例為真,但是你可以在類中定義特定的方法使得類實例的演算值為假。你將會在第5章中了解到類和這些特殊方法。如果布爾環境中的所有值都為真,那麼and返回最後一個值。在這個例子中,and演算'a'的值為真,然後是'b'的演算值為真,最終返回'b'。 | |
如果布爾環境中的某個值為假,則and返回第一個假值。在這個例子中,''是第一個假值。 | |
所有值都為真,所以and返回最後一個真值,'c'。 |
例4.16. or介紹
>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {} >>> def sidefx (): ... print "in sidefx()" ... return 1 >>> 'a' or sidefx() 'a'
例4.17. and-or技巧介紹
>>> a = "first" >>> b = "second" >>> 1 and a or b 'first' >>> 0 and a or b 'second'
and-or技巧,也就是bool and a or b表達式,當a在布爾環境中的值為假時,不會像C語言表達式bool ? a : b那樣工作。
在and-or技巧後面真正的技巧是,確保a的值決不會為假。最常用的方式是使a成為[ a ]、b成為[ b ],然後使用返回值列表的第一個元素,應該是a或b中的某一個。
到現在為止,這個技巧可能看上去問題超過了它的價值。畢竟,使用if 語句可以完成相同的事情,那為什麼要經歷這些麻煩事呢?哦,在很多情況下,你要在兩個常量值中進行選擇,由於你知道a的值總是為真,所以你可以使用這種較為簡單的語法而且不用擔心。對於使用更為複雜的安全形式,依然有很好的理由要求這樣做。例如,在Python語言的某些情況 下if語句是不允許使用的,比如在lambda函數中。
進一步閱讀
<< 過濾列表 | 1 2 3 4 5 6 7 8 9 | 使用lambda 函數 >> |
沒有留言:
張貼留言