Python:bool(-1) 返回 true。为什么会出现这种情况?

问题描述 投票:0回答:3

我决定将

-1
转换为 bool 来检查结果是什么。

与我的预期相反,

bool(-1)
会返回
False
,它返回
True

为什么会这样?

python integer numbers boolean built-in
3个回答
5
投票

根据 Python 3 文档,大多数被认为错误的内置对象是:

  • 定义为 false 的常量:None 和 False。
  • 任何数字类型的零:0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空序列和集合:''、()、[]、{}、set()、range(0)

请注意,它仅指定零为假,而不是任何等于或小于 0 的值。这在各种其他编程语言中也很常见。


3
投票

TL;博士

是的,这是预期的。大多数编程语言只认为 0 为假。

详细

当您考虑 -1 在处理器中的表示方式时,这是有道理的。通常,您可以使用 2 的补码 将正数转换为其对应的负数。 2 的补数通过 将所有位反转并加 1 来表示负二进制数。假设我们有一个 4 位架构,十进制 1 表示为 0001。要得到其负数表示,请将所有位反转并加 1,因此 0001 变为 1110 + 1 = 1111。

当我们想知道一个值是否为

false
时,我们可以
or
它的所有输入,如果结果为 0,则为 false,否则为 true,因此 -1 == true 是完全合理的.

我们使用 2 的补码,而不是 1 的补码(我们只是反转所有位而不加 1)的原因正是因为我们不希望能够同时表示 0 和 -0。


0
投票

在数字上,只有

0
(评估后)才能做出
False
,如下所示:

print(bool(0)) # False

并且,

None
和空字符串也可以组成
False
,如下所示:

print(bool(None)) # False
print(bool("")) # False

并且,以下这些可以制作

True
,如下所示:

print(bool("0")) # True
print(bool("None")) # True
print(bool(" ")) # True
print(bool("False")) # True

另外,

1
True
0
False
,如下图:

print(1 == True) # True
print(0 == False) # True
© www.soinside.com 2019 - 2024. All rights reserved.