Python中3元運算符的實現

這是今天在溫習lambda表達式的時候想到的問題,衆所周知C系列語言中的 三元運算符(?:)是一個非常好用的語句,

關於C中的三元運算符
表達式1?表達式2:表達式3

那麼在python應該如何實現呢,請看下面例子:

答案是:

X = (表達式1)and 表達式2(真值返回)or 表達式3(假值返回)(注:表達式2 以及 表達3 不能爲0、''、[]、()、{}、None)

舉個例子:

def main():  y = 5  x = (y > 5) and 2 or 4
    print x  pass

這段代碼的是意思的輸出是4,可以把表達式的條件改爲(y<=5)這時候輸出就是2

爲什麼能得到這樣的結果:

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

  • 在Python 中,and 和 or 執行布爾邏輯演算,但是它們並不返回布爾值;而是,返回它們實際進行比較的值之一。

  • 如果布爾上下文中的所有值都爲真,那麼 and 返回最後一個值。上下文中的某個值爲假,則 and 返回第一個假值。

  • 如果有一個值爲真,or 立刻返回該值。如果所有的值都爲假,or 返回最後一個假值

基於上述的背景,你應該還能理解這個表達式的含義了吧。

“注:“裏面應該是這個用法的一些缺陷,如果表達式2或3是幾個定義的假值( 0、''、[]、()、{}、None )之一,就會影響判斷了,我的建議是吧這些假值都用字符串的形式表現,並且將“”特殊處理爲“ ”。後續再做判斷

再次見識到Python的強大,如果您有什麼見解歡迎評論。


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