- 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
.