Подтвердить что ты не робот

Почему 1 == True, но 2!= True в Python?

Возможный дубликат:
Является ли False == 0 и True == 1 в Python частью реализации или гарантируется ли это языком?

Краткая расшифровка с моей интерактивной консоли:

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"
4b9b3361

Ответ 1

Потому что Boolean в Python является подтипом целых чисел. Из документации:

Логические значения - это два константных объекта False и True. Они используются для представления значений истинности (хотя другие значения также могут считаться ложными или истинными). В числовых контекстах (например, при использовании в качестве аргумента для арифметического оператора) они ведут себя как целые числа 0 и 1 соответственно. Встроенная функция bool() может использоваться для приведения любого значения в логическое значение, если значение может быть интерпретировано как значение истины (см. Раздел "Тестирование значения истины" выше).

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

Ответ 2

Поскольку экземпляры bool также являются экземплярами int в python. 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
>>> 

Ответ 3

Когда-то (в Python < 2.3) не было логического типа, no False или True, только 0 и 1. Затем PEP 285 пришли, и поэтому они были добавлены к этому языку. Они были определены так, что True == 1 и False == 0, вероятно, по соображениям обратной совместимости.

Ответ 4

Стандартные двоичные условные обозначения: 1 истинно, 0 - false.

Это как 1 означает "on" в машинном языке, а 0 означает "выключено".

Из-за этого тип bool является всего лишь подтипом int в Python, с 1 == True и 0 == False.

Однако любое ненулевое числовое значение будет оцениваться как True в условном выражении:

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

Ответ 5

Тестирование равенства отличается от логического тестирования:

>>> bool(1)
True
>>> bool(2)
True
>>> bool(-1)
True
>>> bool(0)
False

Ответ 6

Это логическая вещь. 1 == true, 0 == false.

Ответ 7

потому что в двоичном выражении 1 истинно, а 0 - false. это также происходит в PHP.

Я не уверен в других языках, но я думаю, что это будет то же самое.

Ответ 8

Он двоичный. 0 всегда False и 1 всегда верно. В python любое любое ненулевое значение, включая отрицательные значения, всегда равно True.

>>> if -1:
...     print 'a'
...
a
>>> if 2:
...     print 'a'
...
a
>>> if 0:
...     print 'a'
...
>>>