在Python2.7中,布尔运算是如何使用括号的?

2024-05-16 13:50:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在玩的时候发现了这个小怪胎。在

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

这不是我的逻辑吗?为什么字符串的顺序是这些查询的决定因素?我应该不使用括号吗?为什么要改变为“和”翻转输出?在

谢谢你给我一个面包卷。在


Tags: orand字符串falsetruehelloworld顺序
2条回答
  • x or y如果第一个操作数是真的,则返回第一个操作数,否则返回 第二个操作数。在
  • x and y返回第一个操作数,如果 否则返回第二个操作数。在

对于你想要完成的事情,你可能更喜欢这样:

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

在Python中,所有对象都可以被认为是“truthy”或“falsy”。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

相关问题 更多 >