为什么'' and not '123'
评估为''
而不是False
,但not '123' and ''
在Python 3.4.3中评估为False
?
答案 0 :(得分:2)
一旦确定答案,逻辑和/或运算符就会停止评估术语(短路)。
and
>>> '' and not '123'
''
第一个是假的,所以and
被短路,第一个被退回。
>>> not '123' and ''
False
not '123'
返回False
。由于这是错误的,and
会被短路,并且会返回not '123'
的结果。
出于完全相同的原因,以下内容返回零:
>>> 0 and '123'
0
以下内容返回[]
:
>>> [] and '123'
[]
or
>>> '' or '123'
'123'
>>> not '123' or 'Hi'
'Hi'
>>> '123' or 'Hi'
'123'
此行为在the documentation中指定:
x or y
定义为if x is false, then y, else x
x and y
定义为if x is false, then x, else y
not x
定义为if x is false, then True, else False