Вот как работают булевы операторы Python.
В контексте логических операций, а также когда выражения используются в выражениях потока управления, следующие значения интерпретируются как ложные: False
, None
, числовой ноль всех типов и пустые строкии контейнеры (включая строки, кортежи, списки, словари, наборы и фрозенсеты).Все остальные значения интерпретируются как истина.(См. Специальный метод __nonzero__()
, чтобы узнать, как это изменить.)
Оператор not
возвращает True
, если его аргумент равен false, False
в противном случае.
Выражениеx and y
первая оценка x
;если x
равно false, возвращается его значение;в противном случае y
вычисляется и возвращается полученное значение.
Выражение x or y
сначала оценивает x
;если x
истинно, возвращается его значение;в противном случае вычисляется y и возвращается результирующее значение.
(Обратите внимание, что ни and
, ни or
не ограничивают возвращаемое значение и тип, равные False
и True
, но скорее возвращают последнееоцененный аргумент. Это иногда полезно, например, если s
является строкой, которая должна быть заменена значением по умолчанию, если оно пустое, выражение s or 'foo'
возвращает желаемое значение. Поскольку not
все равно должен придумывать значениеон не возвращает значение того же типа, что и его аргумент, например, not 'foo'
дает False
, а не ''
.)