为什么在Python中1 == True但是2!= True?

时间:2011-08-20 22:03:58

标签: python

  

可能重复:
  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

这很有意义,因为尽管1True都与if语句的条件相同,但它们实际上并不是一回事。

再次修改1 == True的更有趣的后果:

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

8 个答案:

答案 0 :(得分:34)

因为Python中的布尔值是整数的子类型。来自文档:

  

布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以被认为是假或真)。在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似。如果值可以解释为真值,则内置函数bool()可用于将任何值强制转换为布尔值(请参阅上面的真值测试部分)。

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

答案 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中),没有布尔类型,没有FalseTrue,只有01。然后PEP 285出现,因此他们被添加到语言中。它们的定义是True == 1False == 0,可能是出于向后兼容的原因。

答案 3 :(得分:11)

它是标准的二进制约定:1为真,0为假。

就像1表示机器语言中的“on”,0表示“off”。

因此,bool类型只是Python中int的子类型,1 == True0 == 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'
...
>>>