在玩耍的时候发现这有点奇怪。
>>> 'Hello' == ('Hello' or 'World')
True
>>> 'Hello' == ('World' or 'Hello')
False
>>> 'Hello' == ('Hello' and 'World')
False
>>> 'Hello' == ('World' and 'Hello')
True
这个逻辑是否有一些技巧我没有得到?为什么字符串的顺序是这些查询的决定因素?我根本不应该使用括号吗?为什么改为“和”翻转输出?
感谢buncharooni。
答案 0 :(得分:2)
x or y
返回第一个操作数,如果它的真实,否则返回
第二个操作数。 x and y
返回第一个操作数
falsey,否则返回第二个操作数。对于你想要实现的目标,你可能更喜欢这个:
'Hello' in ['Hello', 'World']
答案 1 :(得分:2)
在Python中,所有对象都可能被视为“truthy”或“falsy”。 Python在评估布尔逻辑时使用这个事实来创建一个偷偷摸摸的快捷方式。如果它遇到允许逻辑“短路”的值,例如True
开头的or
或False
开头的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