我有这段代码:
>>> char = 'A'
>>> 'A' == char
True
>>> ('A' or 'B') == char
True
为什么这不等于True
?
>>> ('B' or 'A') == char
False
答案 0 :(得分:6)
你的表情没有达到预期效果。
'A' or 'B'
这实际上评估为'A'
,在解释器中尝试一下!
当你说
时('A' or 'B') == char
解释器实际上正在执行以下步骤:
('A' or 'B') == char
('A') == char
True
但是当你做的时候
('B' or 'A') == char
口译员这样做:
('B' or 'A') == char
('B') == char
False
你可能想要的是:
'A' == char or 'B' == char
True
答案 1 :(得分:3)
不同之处在于这些表达式的评估方式:
In [1]: 'A' or 'B'
Out[1]: 'A'
In [3]: 'B' or 'A'
Out[3]: 'B'
...因此,在您的情况下,'B'或'A'不应该等于char
。
有关or
应如何运作的详细信息,请参阅"Boolean operations" section of the python docs:
表达式x或y首先计算x;如果x为真,则返回其值;否则,评估y并返回结果值。
上述顺序至关重要,包括一个名为“lazy evaluation”的概念。
答案 2 :(得分:2)
您正在进行的比较实际上会比较'A'
和'B'
的布尔值。
所以:('A' or 'B')
实际上是(bool('A') or bool('B')
,因为它是or
条件,而bool('A')
在第一种情况下是True
所以它会比较{{1}在第二种情况下,'A'==char
为True,因此它会比较bool('B')
('B'==char
)
False
这就是它在后台发生的情况:\
In [114]: False or True
Out[114]: True
In [115]: True or False
Out[115]: True
In [116]: True or True
Out[116]: True
In [117]: bool('A')
Out[117]: True
In [118]: bool('B')
Out[118]: True