is - оператор идентичности
is not - оператор неидентичности
a = ["red", 5, None]
b = ["red", 5, None]
здесь a и b ссылаются на разные объекты
print(a is b)
>False
Возвращает True, если ссылка слева указывает на тот же самый объект, что и ссылка справа:
b = a
print(a is b)
>True
Существует понятие пустого объекта None:
a = "Oracle12c"
b = None
print(a is not None)
print(b is None)
>True
>True
Операторы сравнения:
< - меньше
<= - меньше либо равно
> - больше
>= - больше либо равно
== - равно
!= - не равно
a = 2
b = 6
print(a==b)
>False
print(a<b)
>True
print(a<=b, a!=b, a>=b, a>b)
>True True False False
a = ["red", 5, None]
b = ["red", 5, None]
print(a is b)
>False
print(a == b)
>True
Операторы сравнения могут объединяться в цепочки:
a = 9
print(0<=a<=10)
>True
Это удобнее чем выполнять два отдельных оператора сравнения и объединения их результатов через and.
Попытка сравнить несовместимые значения вызывает исключение:
print("oracle" < 5)
Traceback (most recent call last):
File "None", line 1, in <module>
builtins.TypeError: unorderable types: str() < int()
print("10" < 5)
Traceback (most recent call last):
File "None", line 1, in <module>
builtins.TypeError: unorderable types: str() < int()
Оператор членства
Для типов данных являющихся последовательностями или коллекциями
таких как:
строки
списки
картежи
мы можем выполнить проверку членства с помощью оператора in
или не членства с помощью оператора not in
f = ("oracle", "java", 3, -9)
print( 3 in f )
>True
print( "python" in f )
>False
phrase = "oracle database administration"
print( "m" in phrase )
>True
print( "base" in phrase )
>True
Логические операторы
and
or
not
Операторы and и or вычисляются по короткой схеме и возвращают операнд.
Они не возвращают значение типа Boolean, если операнды не являются значениями типа Boolean.
x or y - if x is False, then y, else x
x and y - if x is False, then x, else y
not x - if x is False, then True, else False
Унарный оператор not оценивает свой операнд в булевом контексте и всегда возвращает значение типа Boolean.
five = 5
two = 2
zero = 0
print(five and two)
>2
print(two and five)
>5
print(five and zero)
>0
Если выражение участвует в логическом контексте, результат оценивается как значение типа Boolean,
поэтому предыдущие выражения могли бы рассматриваться, как имеющие значения True, True и False
в контексте инструкции if.
five = 5
two = 2
zero = 0
nought = 0
print(five or two)
>5
print(two or five)
>2
print(zero or five)
>5
print(zero or nought)
>0
Оператор or напоминает оператор and - здесь в булевом контексте были бы получены значения
True, True, True и False.
print(not(zero or nought))
>True
print(not two)
>False