在Python 2.7中布尔运算与括号如何运作?
在玩的时候发现了这个小问题。
>>> 'Hello' == ('Hello' or 'World')
True
>>> 'Hello' == ('World' or 'Hello')
False
>>> 'Hello' == ('Hello' and 'World')
False
>>> 'Hello' == ('World' and 'Hello')
True
这里面有没有什么我没理解的逻辑?为什么字符串的顺序会影响这些查询的结果?我是不是根本就不应该使用括号?为什么把“and”换了之后结果会变?
谢谢你们的帮助!
2 个回答
2
x or y
的意思是,如果第一个值(x)是“真”的话,就返回它;如果不是,就返回第二个值(y)。x and y
的意思是,如果第一个值(x)是“假”的话,就返回它;如果不是,就返回第二个值(y)。
看起来你想要实现的功能,可能更适合用这个方法:
'Hello' in ['Hello', 'World']
3
在Python中,所有的对象都可以被看作是“真”或者“假”。Python利用这一点来在处理布尔逻辑时提供一个巧妙的快捷方式。当它遇到一个值,可以让逻辑“短路”时,比如在or
开头遇到True
,或者在and
开头遇到False
,它就会直接“返回这个确定的值”。这是因为这个值本身就能正确地被判断为真或假,因此无论它在什么布尔上下文中使用,都会按预期工作。实际上,这种操作总是返回它遇到的第一个能够让表达式完全评估的值(即使这个值是最后一个)。
# "short-circuit" behavior
>>> 2 or 0
2
>>> 0 and 2
0
# "normal" (fully-evaluated) behavior
>>> 'cat' and 'dog'
'dog'
>>> 0 or 2
2