int 如何评估为布尔语句?

How does an int evaluate as a boolean statement?

所以最近在Codecademy学习Python,不小心提交了这个

    def check_bit4(input):
        if 0b1000 & input:
            return "on"
        else:
            return "off"

作为我的代码,但它应该是这样的(省略了 if 语句中的“ > 0 ”)。由于某些原因,上面的代码仍然通过了所有给定的测试用例。

    def check_bit4(input):
        if 0b1000 & input > 0:
            return "on"
        else:
            return "off"

最初的提示要求一个函数来检查第四位是否为 "on"。据我所知,'&' 运算符应该 return 一个 int 值而不是布尔值。那么,我的问题是,为什么第一个程序仍然通过了所有的测试用例?

零被视为虚假值。其他数字视为真值:

>>> bool(1)
True
>>> bool(34)
True
>>> bool(0)
False
如果 input 设置了位,

0b1000 & input 将 return 非零值。因此,如果满足该条件,谓词将被视为 true。

有关真值的更精确定义,请参阅 Truth Value Testing - Python documentation