在阅读了Truth Value Testing的python文档之后,我看到了一些被认为是错误的对象的示例。在这里,很明显,bool(0)和bool(0b0)返回False是有道理的。相反,对于bool(b'0')和bool(bin(0)),这似乎是真的。为什么会这样?因为bin()返回数字的字符串表示,正如b'0'(字符串)不是实际的二进制值(如0b0),并且由于这些字符串不是空字符串,而是由表示零的字符填充,所以它的计算结果为True(请参见Truth Value Testing的第三个项目符号)
我以前使用if语句都非常简单,因此我认为这是理所当然的,并且理解只有布尔True才会导致输入if语句。在遇到这个if语句后,我并不太清楚布尔True的构成。对于那些有compsci背景的人来说,这是显而易见的,但我从未真正深入研究if语句如何确定参数是否为布尔真。例如,如果(5>;2) >;对任何一个至少有小学数学背景的人来说,这是有道理的,所以我认为这是理所当然的。相反,如果(2)>;没错,对于非compsci专家来说,这似乎不太明显
比如说
为什么尽管有2&;2计算为int值2?为什么在给定int值2的情况下输入if语句,即使2本身不是==True?这是我第一次看到这种类型的行为,它让我从其他各种堆栈溢出问题中了解到,if语句不是在计算int值2==True,而是在计算bool(2)==True,这实际上是真的
同样,如果你有comp-sci的背景,我相信这是非常明显的,但即使是bool(2)和“真值测试”作为一个短语的想法对我来说也是新的,所以将其添加到二进制逻辑运算符中一开始会让我有点困惑。例如:
起初,由于对if语句在计算参数==True时的错误理解,上面的示例似乎非常不合逻辑,因为我认为二进制1应该导致True,二进制0应该导致False。我不知道为什么大于1的整数值,无论是int形式还是二进制形式,都应该返回True
在阅读了Truth Value Testing的python文档之后,我看到了一些被认为是错误的对象的示例。在这里,很明显,bool(0)和bool(0b0)返回False是有道理的。相反,对于bool(b'0')和bool(bin(0)),这似乎是真的。为什么会这样?因为bin()返回数字的字符串表示,正如b'0'(字符串)不是实际的二进制值(如0b0),并且由于这些字符串不是空字符串,而是由表示零的字符填充,所以它的计算结果为True(请参见Truth Value Testing的第三个项目符号)
我给出了一些不明显的(对我来说)真相评估测试的例子,以及为什么它们确实有逻辑意义。希望这能帮助其他人,他们可能被(对我来说)if语句的不太常见的用法弄糊涂了
相关问题 更多 >
编程相关推荐