一直以来,我以为python中and
和or
的返回值是True
或False
。
看 《Dive into Python》这本书时,发现他们并不返回布尔值,而是返回他们实际进行比较的值之一。
and
根据自己已经掌握的知识,设想下如下代码的运算结果:
1 | 'a' and 'b' |
根据python的定义,在没有看这部分内容之前,我认为答案分别为True
,False
,True
。其实运行之后才发现应该是这样的:
1 | Python 2.7.13+ (default, Jul 19 2017, 18:15:03) |
原因如下:
- and运算时,从左到右演算表达式的值。
0
,''
,[]
,{}
, None在布尔表达式环境下为假,其他任何东西都为真 - 如果and运算中,所有的值都为真,那么and返回最后一个值。如:
'a' and 'b'
- 如果某个值为假,那么and立即返回该假值(短路运算),如:
'' and 'b'
or
类似的。or
的规则如下:
- 从左到右演算
- 如果有一个值为真,立即返回该值
- 所有所有的值都为假,返回最后一个假值
Python 官方文档的表述
在Python官方文档中 boolean-operations-and-or-not 中,由如下表述:
这里也充分说明了,and
和 or
以及 not
等三个运算符操作的结果。