0
, 0.0
считаются False
, все остальное - True
.""
считается False
, непустая - True
.False
, непустые - True
.None
: Всегда считается False
.and
и or
возвращают не булево значение, а один из операндов. Оператор and
возвращает первый False
операнд или последний True
операнд, если все операнды True
. Оператор or
возвращает первый True
операнд или последний False
операнд, если все операнды False
.
В Python логические выражения с несколькими типами данных вычисляются в соответствии с правилами "truthiness" (истинности) и приоритетом операторов and
, or
, и not
.
"Truthiness": Каждый объект в Python имеет значение, которое можно интерпретировать как True
или False
. Вот основные правила:
True
: Все ненулевые числа, непустые строки, списки, кортежи, словари и множества. Объекты, у которых определен метод __bool__()
(или __len__()
, если __bool__()
отсутствует), который возвращает True
или ненулевое значение.False
: False
, None
, 0
(целое, вещественное, комплексное), пустые строки (""
), пустые списки ([]
), кортежи (()
), словари ({}
) и множества (set()
). Объекты, у которых определен метод __bool__()
(или __len__()
, если __bool__()
отсутствует), который возвращает False
или ноль.Оператор and
: Возвращает первый "falsey" объект, если он найден. В противном случае (если все операнды "truthy") возвращает последний операнд.
Пример:
1 and "hello" # Возвращает "hello"
0 and "hello" # Возвращает 0
"hello" and "" # Возвращает ""
"hello" and 5 # Возвращает 5
Оператор or
: Возвращает первый "truthy" объект, если он найден. В противном случае (если все операнды "falsey") возвращает последний операнд.
Пример:
1 or "hello" # Возвращает 1
0 or "hello" # Возвращает "hello"
"" or False # Возвращает False
0 or [] # Возвращает []
Оператор not
: Возвращает True
, если операнд "falsey", и False
, если операнд "truthy". Всегда возвращает булево значение (True
или False
).
Пример:
not 1 # Возвращает False
not 0 # Возвращает True
not "hello" # Возвращает False
not "" # Возвращает True
not [] # Возвращает True
Приоритет операторов: Оператор not
имеет самый высокий приоритет, затем and
, и наименьший приоритет у or
. Используйте скобки для явного указания порядка вычислений.
Пример:
True or False and False # Эквивалентно True or (False and False) -> True or False -> True
(True or False) and False # Эквивалентно True and False -> False
Сокращенное вычисление (Short-circuit evaluation): Python использует сокращенное вычисление. Это означает, что Python перестает вычислять выражение, как только результат становится известен.
Пример:
def side_effect():
print("Функция вызвана!")
return True
False and side_effect() # "Функция вызвана!" не будет напечатано, так как результат уже известен (False)
True or side_effect() # "Функция вызвана!" не будет напечатано, так как результат уже известен (True)
Понимание этих правил позволяет предсказывать и контролировать поведение логических выражений в Python, особенно при работе с разными типами данных.