Python的and和or的返回值

yarving發表於2019-02-16

一直以來,我以為python中andor的返回值是TrueFalse

看 《Dive into Python》這本書時,發現他們並不返回布林值,而是返回他們實際進行比較的值之一。

and

根據自己已經掌握的知識,設想下如下程式碼的運算結果:

`a` and `b`
`` and `b`
`a` and `b` and `c`

根據python的定義,在沒有看這部分內容之前,我認為答案分別為TrueFalseTrue。其實執行之後才發現應該是這樣的:

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`
>>>

原因如下:

  1. and運算時,從左到右演算表示式的值。0, ``, [], {}, None在布林表示式環境下為假,其他任何東西都為真
  2. 如果and運算中,所有的值都為真,那麼and返回最後一個值。如:`a` and `b`
  3. 如果某個值為假,那麼and立即返回該假值(短路運算),如:`` and `b`

or

類似的。or的規則如下:

  1. 從左到右演算
  2. 如果有一個值為真,立即返回該值
  3. 所有所有的值都為假,返回最後一個假值

本文作者: Yarving Liu
本文連結: http://yarving.historytale.co…
版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處!

相關文章