Python if语句和非compsci背景的真值测试

2024-05-03 11:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个自我回答的问题,经过几个小时的挖掘,我发现这个思考过程可能对其他可能没有正式compsci背景的人有用

这一切都源于对为什么要输入一个特定if语句的困惑

>>>if (2 & 2):
...    print("true")
true

为什么要输入这个if语句


Tags: trueif过程语句背景print小时compsci
1条回答
网友
1楼 · 发布于 2024-05-03 11:37:26

我以前使用if语句都非常简单,因此我认为这是理所当然的,并且理解只有布尔True才会导致输入if语句。在遇到这个if语句后,我并不太清楚布尔True的构成。对于那些有compsci背景的人来说,这是显而易见的,但我从未真正深入研究if语句如何确定参数是否为布尔真。例如,如果(5>;2) >;对任何一个至少有小学数学背景的人来说,这是有道理的,所以我认为这是理所当然的。相反,如果(2)>;没错,对于非compsci专家来说,这似乎不太明显

比如说

>>>2 & 2
2
>>> 2 == True
False
>>>if (2):
...    print("true")
true

为什么尽管有2&;2计算为int值2?为什么在给定int值2的情况下输入if语句,即使2本身不是==True?这是我第一次看到这种类型的行为,它让我从其他各种堆栈溢出问题中了解到,if语句不是在计算int值2==True,而是在计算bool(2)==True,这实际上是真的

同样,如果你有comp-sci的背景,我相信这是非常明显的,但即使是bool(2)和“真值测试”作为一个短语的想法对我来说也是新的,所以将其添加到二进制逻辑运算符中一开始会让我有点困惑。例如:

>>>2 & 4
0
>>>if (2 & 4):
...    print("true")
>>>bin(2 & 4)
'0b0'
>>>if ('0b0'):
...    print("true")
true
>>>if (0b0):
...    print("true")
>>>bool(0)
False
>>>bool(0b0)
False
>>>bool(b'0')
True
>>>bool(bin(0))
True

起初,由于对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语句的不太常见的用法弄糊涂了

相关问题 更多 >