一直以來,我以為python中and
和or
的返回值是True
或False
。
看 《Dive into Python》這本書時,發現他們並不返回布林值,而是返回他們實際進行比較的值之一。
and
根據自己已經掌握的知識,設想下如下程式碼的運算結果:
`a` and `b`
`` and `b`
`a` and `b` and `c`
根據python的定義,在沒有看這部分內容之前,我認為答案分別為True
,False
,True
。其實執行之後才發現應該是這樣的:
Python 2.7.13+ (default, Jul 19 2017, 18:15:03)
[GCC 6.4.0 20170704] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> `a` and `b`
`b`
>>> `` and `b`
``
>>> `a` and `b` and `c`
`c`
>>>
原因如下:
- and運算時,從左到右演算表示式的值。
0
,``
,[]
,{}
, None在布林表示式環境下為假,其他任何東西都為真 - 如果and運算中,所有的值都為真,那麼and返回最後一個值。如:
`a` and `b`
- 如果某個值為假,那麼and立即返回該假值(短路運算),如:
`` and `b`
or
類似的。or
的規則如下:
- 從左到右演算
- 如果有一個值為真,立即返回該值
- 所有所有的值都為假,返回最後一個假值
本文作者: Yarving Liu
本文連結: http://yarving.historytale.co…
版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處!