布尔运算如何在python 2.7中使用括号?

时间:2014-04-28 20:17:56

标签: python python-2.7 logic boolean-expression

在玩耍的时候发现这有点奇怪。

>>> 'Hello' == ('Hello' or 'World')
True
>>> 'Hello' == ('World' or 'Hello')
False
>>> 'Hello' == ('Hello' and 'World')
False
>>> 'Hello' == ('World' and 'Hello')
True

这个逻辑是否有一些技巧我没有得到?为什么字符串的顺序是这些查询的决定因素?我根本不应该使用括号吗?为什么改为“和”翻转输出?

感谢buncharooni。

2 个答案:

答案 0 :(得分:2)

  • x or y返回第一个操作数,如果它的真实,否则返回 第二个操作数。
  • x and y返回第一个操作数 falsey,否则返回第二个操作数。

对于你想要实现的目标,你可能更喜欢这个:

'Hello' in ['Hello', 'World']

答案 1 :(得分:2)

在Python中,所有对象都可能被视为“truthy”或“falsy”。 Python在评估布尔逻辑时使用这个事实来创建一个偷偷摸摸的快捷方式。如果它遇到允许逻辑“短路”的值,例如True开头的orFalse开头的and 1}},它只是返回确定值。这是有效的,因为值本身适当地评估为真或假,因此它所使用的任何布尔上下文继续按预期运行。事实上,这样的操作总是只返回它们遇到的第一个值,允许它们完全评估表达式(即使它是最后一个值)。

# "short-circuit" behavior
>>> 2 or 0
2
>>> 0 and 2
0

# "normal" (fully-evaluated) behavior
>>> 'cat' and 'dog'
'dog'
>>> 0 or 2
2