6.0 KiB
title | localeTitle |
---|---|
Python Comparisons | Сравнение Python |
В Python имеется восемь операций сравнения. Все они имеют одинаковый приоритет (что выше, чем у булевых операций). Сравнения могут быть скованы произвольно; например, x < y <= z
эквивалентно x < y and y <= z
, за исключением того, что y
оценивается только один раз (но в обоих случаях z
вообще не оценивается, когда x < y
оказывается ложным).
В этой таблице приведены операции сравнения:
Операция | Имея в виду
--------- | -----------------------
<
| строго меньше
<=
| меньше или равно >
| строго больше, чем >=
| больше или равно ==
| равно !=
| не равный is
| идентификатор объекта
is not
| отрицательный идентификатор объекта
Объекты разных типов, кроме разных числовых типов, никогда не сравниваются с равными. Кроме того, некоторые типы (например, объекты функций) поддерживают только вырожденное понятие сравнения, где любые два объекта такого типа неравны. Операторы <
, <=
, >
и >=
будут вызывать исключение TypeError
при сравнении сложного числа с другим встроенным числовым типом, когда объекты имеют разные типы, которые нельзя сравнивать, или в других случаях, когда нет определенных упорядоченность.
__eq__()
экземпляры класса обычно сравниваются как не равные, если класс не определяет метод __eq__()
.
Экземпляры класса не могут быть упорядочены относительно других экземпляров одного и того же класса или других типов объектов, если только класс не определяет достаточно методов __lt__()
, __le__()
, __gt__()
и __ge__()
(в общем случае , __lt__()
и __eq__()
достаточны, если вы хотите использовать обычные значения операторов сравнения).
Поведение is
и is not
операторы не могут быть настроены; также они могут применяться к любым двум объектам и никогда не создавать исключение.
Мы также можем связать операторы <
и >
. Например, 3 < 4 < 5
вернет True
, но 3 < 4 > 5
не будет. Мы также можем связать оператор равенства. Например, 3 == 3 < 5
вернет True
но 3 == 5 < 5
не будет.
Сравнение равенств - "is" vs "=="
В Python есть два оператора сравнения, которые позволяют нам проверить, равны ли два объекта. Оператор is
оператор ==
. Однако есть ключевое различие между ними!
Ключевое различие между «is» и «==» можно суммировать как:
is
используется для сравнения идентичности==
используется для сравнения равенства
пример
Сначала создайте список в Python.
myListA = [1,2,3]
Затем создайте копию этого списка.
myListB = myListA
Если мы используем оператор '==' или оператор 'is', оба будут иметь выход True .
>>> myListA == myListB # both lists contains similar elements
True
>>> myListB is myListA # myListB contains the same elements
True
Это связано с тем, что myListA и myListB указывают на ту же переменную списка, которую я определил в начале моей программы Python. Оба списка точно такие же, как в личном, так и в контенте.
Однако, что, если я сейчас создам новый список?
myListC = [1,2,3]
Выполнение оператора ==
все еще показывает, что оба списка одинаковы с точки зрения контента.
>>> myListA == myListC
True
Однако выполнение оператора is
теперь приведет к выходу False
. Это связано с тем, что myListA и myListC представляют собой две разные переменные, несмотря на то, что они содержат одни и те же данные. Хотя они выглядят одинаково, они разные .
>>> myListA is myListC
False # both lists have different reference
Подводить итоги:
- An
is
выражение выводитTrue
если обе переменные указывают на одну и ту же ссылку - Выражение
==
выводит значениеTrue
если обе переменные содержат одни и те же данные