- 本文作者: Yarving Liu
- 本文鏈接: http://yarving.historytale.com/2018/06/27/python-and-or/
- 版權(quán)聲明:本博客所有文章除特別聲明外需五,均采用 CC BY-NC-SA 4.0 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明出處冠桃!
一直以來(lái)切黔,我以為python中and
和or
的返回值是True
或False
。
看 《Dive into Python》這本書(shū)時(shí)适袜,發(fā)現(xiàn)他們并不返回布爾值,而是返回他們實(shí)際進(jìn)行比較的值之一。
and
根據(jù)自己已經(jīng)掌握的知識(shí)湾揽,設(shè)想下如下代碼的運(yùn)算結(jié)果:
'a' and 'b'
'' and 'b'
'a' and 'b' and 'c'
根據(jù)python的定義,在沒(méi)有看這部分內(nèi)容之前笼吟,我認(rèn)為答案分別為True
库物,False
,True
贷帮。其實(shí)運(yùn)行之后才發(fā)現(xiàn)應(yīng)該是這樣的:
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運(yùn)算時(shí),從左到右演算表達(dá)式的值撵枢。
0
,''
,[]
,{}
, None在布爾表達(dá)式環(huán)境下為假,其他任何東西都為真 - 如果and運(yùn)算中,所有的值都為真垂攘,那么and返回最后一個(gè)值吱型。如:
'a' and 'b'
- 如果某個(gè)值為假,那么and立即返回該假值(短路運(yùn)算)据沈,如:
'' and 'b'
or
類似的。or
的規(guī)則如下:
- 從左到右演算
- 如果有一個(gè)值為真,立即返回該值
- 所有所有的值都為假,返回最后一個(gè)假值