解释字符串布尔测试结果

时间:2012-10-27 20:51:01

标签: python

我有这段代码:

>>> char = 'A'
>>> 'A' == char
True
>>> ('A' or 'B') == char
True

为什么这不等于True

>>> ('B' or 'A') == char
False

3 个答案:

答案 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
相关问题