有人可以向我解释为什么在评估数值表达式时,作为评估结果的Python会返回最后评估的内容吗?
例如:
3 and 5
评估为
5
我遇到的另一个问题是,当我尝试检查时,为什么甚至会评估这些表达式:
3 == True
我得到假,但当我评估时:
3 and 5
并得到5因此显然(我认为)认为3评估为True,因为它不会继续评估是否认为不是(我可能在这里错了)。 相反,当我评价:
0 and 3
我得到0,我认为发生的事情是Python检查0是否为True,判断它不是并且吐出来。
我很抱歉,如果这一切听起来有点乱,但我在书中偶然发现了这一点,并且好奇我是否有遗漏的东西。
答案 0 :(得分:3)
是的,在python中,任何值都是真或假的。除了0之外,每个整数都是真实的。使用布尔运算符or
和and
,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 3
为3
,则3 or 5
为3
也将是a and b
,False
返回评估为True
的第一个元素,否则(如果所有元素都被评估为0 and 3
),则返回最后一个元素,因此0
将成为3 and 5
5
和bool()
将成为>>> 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])
和我现在相信这是一个更合理的解决方案。