- Falsy и Truthy значения
- Пример с делением на остаток
- Как работают логические выражения
- Примеры
- Использование в функциях
В Python значения разных типов можно использовать напрямую в логических выражениях. При этом они ведут себя как True или False в зависимости от того, относятся ли к категории truthy или falsy.
Falsy и Truthy значения
В Python есть фиксированный набор значений, которые считаются ложными (falsy):
0— любое нулевое число (0,0.0)- пустая строка
"" - пустые коллекции —
[],{},set(),()(мы пока их не проходили) - специальное значение
None
Все остальные значения считаются истинными (truthy). Например:
- любое ненулевое число (
1,-3.5) - непустая строка (
"hi","0") - непустые коллекции (
[1],{"a": 1},(0,)) (будем изучать на Хекслете)
Пример с делением на остаток
result = 10 % 2 == 0 and "yes" or "no"
print(result) # => "yes"
Здесь выражение читается так:
- Сначала выполняется арифметика
10 % 2 == 0→True. - Потом работает
and: так как слева истина, результатом становится"yes". - Так как
"yes"— truthy, операторorвозвращает именно его.
Как работают логические выражения
В Python логические выражения возвращают не обязательно True или False. Они возвращают один из своих операндов:
- оператор
andвозвращает первый falsy-операнд или последний truthy, - оператор
orвозвращает первый truthy-операнд или последний falsy.
Поэтому результатом может быть строка, число или любой другой объект, участвующий в выражении.
Примеры
print(7 % 2 == 0 and "even" or "odd")
# => "odd"
print(("" and "not empty") or "empty")
# => "empty"
print(("hello" and "not empty") or "empty")
# => "not empty"
print((-5 > 0 and "positive") or "non-positive")
# => "non-positive"
Использование в функциях
Особенность truthy и falsy значений удобно применять в функциях. Например, можно написать функцию, которая возвращает текст, если он непустой, или значение по умолчанию, если строка пустая.
def get_text_or_default(text: str, default: str = "empty") -> str:
return text or default
print(get_text_or_default("hello")) # => "hello"
print(get_text_or_default("")) # => "empty"
Здесь выражение text or default работает так:
- если
textнепустой (truthy), функция вернёт его, - если
textпустой (falsy), функция вернётdefault.