看看Python上的这段代码:
a='a'
print(a==('a' or 'b'))
a='b'
print(a==('a' or 'b'))
输出将是:
True
False
你能解释一下为什么吗?
谢谢!
为了分解它,首先评估括号。 因此,"a" or "b"
- "a"是真实的并返回自身。"b"永远不会被计算,因为非空字符串将始终是真实的。
为了更好地了解这一点,请在提示符中单独运行它
>>> ('a' or 'b')
'a'
因此,您最终会得到'a' == 'a'
- 这是真的
在第二个示例中,A 设置为"B",因此会发生同样的事情,只有"B"≠"A",因此它返回 false
@rm-vanda是正确的。
我相信使用列表或元组可以更好地找到您期望的行为:
>>> a = "b"
>>> a in ["a", "b"]
True
('a' or 'b')
将始终解析为'a'
,因为'a'
在布尔上下文中解析为True
。
x or y
如果x
为 True(= 不同于None
、False
、""
、(,)
、[]
或{}
),则返回x
的值,否则返回y
的值。
当你有一个像'a' or 'b'
这样的表达式时,它将返回第一个不False
的值。话虽如此,在这两种情况下,表达式都将返回'a'
。
我假设你可以自己弄清楚其余部分,但第一个是True
,因为你等同于'a' == 'a'
,而在第二个'b' == 'a'
.