可能重复:
Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?
我的交互式控制台的简短成绩单:
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
这很有意义,因为尽管1
和True
都与if
语句的条件相同,但它们实际上并不是一回事。
再次修改:1 == True
的更有趣的后果:
>>> d = {}
>>> d[True] = "hello"
>>> d[1]
"hello"
答案 0 :(得分:34)
因为Python中的布尔值是整数的子类型。来自文档:
布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以被认为是假或真)。在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似。如果值可以解释为真值,则内置函数bool()可用于将任何值强制转换为布尔值(请参阅上面的真值测试部分)。
答案 1 :(得分:27)
因为bool
的实例也是python中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
>>>
答案 2 :(得分:12)
曾几何时(在Python< 2.3中),没有布尔类型,没有False
或True
,只有0
和1
。然后PEP 285出现,因此他们被添加到语言中。它们的定义是True == 1
和False == 0
,可能是出于向后兼容的原因。
答案 3 :(得分:11)
它是标准的二进制约定:1为真,0为假。
就像1表示机器语言中的“on”,0表示“off”。
因此,bool
类型只是Python中int
的子类型,1 == True
和0 == False
。
但是,在条件语句中,任何非零数值都将被评估为True
:
>>> if 2: print "ok"
ok
>>> 2 == True
False
答案 4 :(得分:3)
平等测试与布尔测试不同:
>>> bool(1)
True
>>> bool(2)
True
>>> bool(-1)
True
>>> bool(0)
False
答案 5 :(得分:0)
这是一个布尔值。 1 == true,0 == false。
答案 6 :(得分:0)
因为二进制1为真,0为假。 它也发生在PHP中。
我不确定其他语言,但我认为它会是一样的。
答案 7 :(得分:-1)
这是二进制的。 0始终为False,1始终为True。在python中虽然任何非零值,包括负值都是True。
>>> if -1:
... print 'a'
...
a
>>> if 2:
... print 'a'
...
a
>>> if 0:
... print 'a'
...
>>>