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

Можно ли заменить "==" на "is", чтобы сравнить значения Boolean

Я сделал несколько булевых сравнений:

>>> (True or False) is True
True
>>> (True or False) == True
True

Похоже, что == и is взаимозаменяемы для булевых значений.

Иногда более понятно использовать is

Я хочу знать, что:

Предоставлены ли True и False в python?

Является ли bool(var) всегда возвращать те же True (или False) с предварительно выделенным True (или False)?

Можно ли заменить == на is, чтобы сравнить значения Boolean?


Это не о лучшей практике.

Я просто хочу знать Истину.

4b9b3361

Ответ 1

Вам, вероятно, никогда не придется сравнивать booleans. Если вы делаете что-то вроде:

if some_bool == True:
  ...

... просто измените его на:

if some_bool:
  ...

Нет is или ==.

Как отмечают комментаторы, существуют веские причины для сравнения булевых. Если оба булина неизвестны, и вы хотите знать, совпадает ли он с другим, вы должны использовать == или !=, а не is или is not (причина объясняется ниже). Обратите внимание, что это логически эквивалентно xnor и xor соответственно, которые не существуют как логические операторы в Python.

Внутри всегда должно быть два булевых литерала (см. также API API"), а bool(x) is True должен быть True, если bool(x) == True для любой программы Python. Два оговорки:

  • Это не означает, что x is True, если x == True, однако (например, x = 1).
  • Это справедливо для обычной реализации Python (CPython), но может быть неверным в других реализациях. Следовательно, == является более надежным сравнением.

Ответ 2

Следите за тем, что еще вы можете сравнить.

>>> 1 == True
True
>>> 1 is True
False

True и False будут иметь стабильные идентификаторы объектов для своего времени жизни в вашем экземпляре python.

>>> id(True)
4296106928
>>> id(True)
4296106928

is сравнивает идентификатор объекта

EDIT: добавление or

Поскольку OP использует or, о котором идет речь, может быть полезно указать это.

или который оценивает значение True: возвращает первый объект True.

>>> 1 or True
1
>>> 'a' or True
'a'
>>> True or 1
True

или который оценивает False: возвращает последний объект "False"

>>> False or ''
''
>>> '' or False
False

, и это значение равно True: возвращает последний объект "True"

>>> True and 1
1
>>> 1 and True
True

, и он вычисляет значение False: возвращает первый объект "False"

>>> '' and False
''
>>> False and ''
False

Это важная идиома python и позволяет использовать сжатый и компактный код для работы с логической логикой над обычными объектами python.

>>> bool([])
False
>>> bool([0])
True
>>> bool({})
False
>>> bool({False: False})
True
>>> bool(0)
False
>>> bool(-1)
True
>>> bool('False')
True
>>> bool('')
False

В основном "пустые" объекты False, "non empty" - "True".

Объединяя это с @detly, а другие ответы должны дать некоторое представление о том, как использовать if и bools в python.

Ответ 3

Да. Есть ровано, чтобы быть ровно двумя bool s, True и False:

Класс bool не может быть подклассом в дальнейшем. Его единственными экземплярами являются False и True.

Это означает, что если вы знаете, что оба операнда bool, == и is эквивалентны. Однако, как отмечает detly, обычно нет оснований для использования в этом случае.

Ответ 4

Кажется, что все ответы касаются True и False, определенных после запуска интерпретатора. Прежде чем булевы стали частью Python, они часто определялись как часть программы. Даже сейчас (Python 2.6.6) они являются только именами, которые можно указать на разные объекты:

>>> True = 1
>>> (2 > 1)
True
>>> (2 > 1) == True
True
>>> (2 > 1) is True
False

Если вам приходится иметь дело со старым программным обеспечением, имейте это в виду.

Ответ 6

== и is - оба оператора сравнения, которые возвращают логическое значение - True или False. True имеет числовое значение 1 и False имеет числовое значение 0.

Оператор == сравнивает значения двух объектов и объектов, по сравнению с которыми чаще всего являются одни и те же типы (int vs int, float vs float). Если вы сравниваете объекты разных типов, то они неравны. Оператор is проверяет идентичность объекта, 'x is y' истинно, если оба x и y имеют одинаковый id. То есть, это те же объекты.

Итак, когда вы сравниваете, сравнивая возвращаемые значения одного и того же типа, используйте ==, и если вы сравниваете, если два объекта одинаковы (булевы или что-то еще), вы можете использовать is.

42 is 42 Верен и совпадает с 42 == 42.