为什么在Python中1等于True而2不等于True?

34 投票
8 回答
19015 浏览
提问于 2025-04-17 00:01

可能重复的问题:
在Python中,False等于0和True等于1是实现细节,还是语言保证的?

这是我在交互式控制台中的简短记录:

Python 2.7.2 (default, Jun 29 2011, 11:10:00) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True
True
>>> 0 == True
False
>>> 1 == True
True
>>> 2 == True
False

这到底是为什么呢?

编辑:为了对比,考虑一下 is 操作符。

>>> 0 is False
False
>>> 1 is True
False
>>> 0 is 0
True
>>> True is True
True

这很有道理,因为虽然 1Trueif 语句的条件中都表示相同的意思,但它们实际上并不是同一回事。

再次编辑:关于 1 == True 的更多有趣结果:

>>> d = {}
>>> d[True] = "hello"
>>> d[1]
"hello"

8 个回答

13

这就是标准的二进制规则:1代表真,0代表假。

就像在机器语言中,1表示“开”,而0表示“关”。

所以在Python中,bool类型其实是int类型的一种子类型,1 == True,而0 == False

不过,在条件判断中,任何非零的数字值都会被认为是True

>>> if 2: print "ok"
ok
>>> 2 == True
False
28

因为在Python中,bool类型的实例其实也是int类型的实例。也就是说,True的值实际上等于整数1

看看这个例子:

[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> isinstance(True, int)
True
>>> int(True)
1
>>> 
37

在Python中,布尔值其实是整数的一种特殊类型。根据文档的说明:

布尔值只有两个常量对象,分别是False(假)和True(真)。它们用来表示真假值(虽然其他一些值也可以被看作是假或真)。在数字上下文中(比如当它们作为算术运算符的参数时),布尔值的表现就像整数0和1,分别对应False和True。你可以使用内置的函数bool()将任何值转换为布尔值,只要这个值能够被理解为真假值(具体可以参考上面的真假值测试部分)。

http://docs.python.org/library/stdtypes.html#boolean-values

撰写回答