评估数字表达式

时间:2011-11-20 14:47:39

标签: python boolean

有人可以向我解释为什么在评估数值表达式时,作为评估结果的Python会返回最后评估的内容吗?

例如:

3 and 5

评估为

5

我遇到的另一个问题是,当我尝试检查时,为什么甚至会评估这些表达式:

3 == True

我得到假,但当我评估时:

3 and 5

并得到5因此显然(我认为)认为3评估为True,因为它不会继续评估是否认为不是(我可能在这里错了)。 相反,当我评价:

0 and 3

我得到0,我认为发生的事情是Python检查0是否为True,判断它不是并且吐出来。

我很抱歉,如果这一切听起来有点乱,但我在书中偶然发现了这一点,并且好奇我是否有遗漏的东西。

3 个答案:

答案 0 :(得分:3)

是的,在python中,任何值都是真或假的。除了0之外,每个整数都是真实的。使用布尔运算符orand,python返回它评估的最后一个表达式,例如3 or 5将返回3,因为python首先看到3是真实的并且不必评估5并返回3.

在0和5中,0是假的,因此python不会计算下一个表达式并返回0.

5 == True给出False为5的原因不等于true,它只是在布尔表达式中表现真实。 bool(5) == True给出True,因为它显式地将整数转换为布尔值。

答案 1 :(得分:2)

来自Python参考:

The expression x and y first evaluates x; if x is false, its value is returned;
otherwise, y is evaluated and the resulting value is returned.

如果你说过

0 and 5

将返回第一个评估(0)的值。

对于第二个问题,3在被视为布尔值时显然会求值为true,但==运算符在比较之前不会将其参数强制转换为布尔值。

答案 2 :(得分:0)

布尔运算如何工作

documentation on boolean operations。它们以下列方式工作:

  • a or b返回评估为True的第一个元素,因此如果0 or 33,则3 or 53也将是a and b
  • False返回评估为True的第一个元素,否则(如果所有元素都被评估为0 and 3),则返回最后一个元素,因此0将成为3 and 5 5bool()将成为>>> bool(0 or 3) True >>> bool(3 or 5) True >>> bool(0 and 3) False >>> bool(3 and 5) True

解决方案

但是你的问题有一个解决方案。只需使用bool(a or b)

将结果转换为布尔值
any([a, b])

有帮助吗?

修改

另一种解决方案

实际上我认为在您的情况下,您的问题可能会有更好的解决方案。见:

  • bool(a and b)可以替换为all([a, b])
  • {{1}}可以替换为{{1}},

我现在相信这是一个更合理的解决方案。