Логические значения `truthy` и `falsy` в Python
Эта статья объясняет логические значения truthy
и falsy
в Python.
YouTube Video
Логические значения truthy
и falsy
в Python
Определение truthy
и falsy
В Python объекты, оцениваемые в условных выражениях, считаются либо 'True', либо 'False'. Truthy
относится к объектам, оцениваемым как 'True', а falsy
- к объектам, оцениваемым как 'False'. Эти оценки часто используются в условных ветвлениях, таких как операторы if
или циклы while
. Также функция bool()
принимает любой объект и возвращает его булево значение.
Falsy
(Объекты, оцениваемые как False)
В Python следующие объекты считаются ложными
(falsy):.
-
False
-
None
-
Числовые нулевые значения
- Пример:
0
,0.0
- Пример:
-
Пустые последовательности (такие как пустые списки, кортежи или строки)
- Пример:
[]
,()
,""
- Пример:
-
Пустой словарь
- Пример:
{}
- Пример:
-
Пустое множество
- Пример:
set()
- Пример:
Эти объекты оцениваются как 'ложные' (falsy), когда используются в условии оператора if
. Например, вы можете написать код следующим образом.
1if not []:
2 print("The list is falsy.")
- В этом коде список
[]
пуст, поэтому он оценивается какложный
(falsy), и выполняется операторprint
.
Truthy
(Объекты, оцениваемые как True)
Объекты, которые не считаются ложными
, считаются истинными
(truthy).
-
Ненулевые числа (целые, числа с плавающей точкой)
- Примеры:
1
,3.14
,-100
- Примеры:
-
Непустые последовательности (списки, кортежи, строки и т.д.)
- Примеры:
[1, 2, 3]
,(1, 2)
,"Hello"
- Примеры:
-
Непустые словари
- Пример:
{"key": "value"}
- Пример:
-
Непустые множества
- Пример:
{1, 2, 3}
- Пример:
Объекты, считающиеся истинными
, будут интерпретированы как 'True', когда используются в условии оператора if
. Например, вы можете написать код следующим образом.
1if [1, 2, 3]:
2 print("The list is truthy.")
- В приведённом выше коде, поскольку список
[1, 2, 3]
не пустой, он оценивается какистинный
, и выполняется командаprint
.
Оценка булева значения с помощью функции bool()
Вы можете определить булево значение объекта с помощью функции bool()
.
1# Examples of falsy values
2print("False is", "truthy" if bool(False) else "falsy")
3print("0 is", "truthy" if bool(0) else "falsy")
4print('"" is', "truthy" if bool("") else "falsy")
5print("None is", "truthy" if bool(None) else "falsy")
6print("[] is", "truthy" if bool([]) else "falsy")
7
8# Examples of truthy values
9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
- Этот код демонстрирует, как оценивается истинность различных значений. Например, числовое значение
0
и пустая строка считаютсяFalse
, в то время как пробел или строка"0"
считаютсяTrue
.
Использование истинных
(truthy) и ложных
(falsy)
Используя истинные
и ложные
значения, можно писать код более лаконично и интуитивно понятно. В частности, операторы if
часто можно оценивать без явных сравнений для их упрощения. Например, следующие два блока кода ведут себя одинаково, но первый вариант более лаконичен.
1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5 print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9 print("The list is not empty.")
В приведенном выше примере вы видите, что my_list
оценивается как истинный
(truthy), пока это не пустой список, что устраняет необходимость в явном сравнении.
Проектирование с учетом истинных
(truthy) и ложных
(falsy)
Эффективное использование концепций истинных
(truthy) и ложных
(falsy) может повысить читаемость и эффективность кода. Они особенно полезны для установки значений по умолчанию, проверки допустимости переменных и проверки ввода. Например, если вы ожидаете, что аргументами будут переданы None
или пустой список, вы можете написать код следующим образом.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- В этом коде, если
data
равноNone
, в качестве значения по умолчанию устанавливается пустой список[]
. Таким образом, использование понятийtruthy
иfalsy
позволяет лаконично задавать значения по умолчанию.
Важные моменты для избежания непредвиденного поведения
Однако, хотя использование истинных
и ложных
значений делает код лаконичным и удобным, оно может привести к непредвиденному поведению. Например, в этом коде, не только когда data
равно None
, но и при любом значении, оцениваемом как False
(например, пустая строка или 0
), оно будет заменено на пустой список []
по умолчанию. По этой причине, когда требуется более строгое условие, например, инициализация только если значение None
, рекомендуется использовать явное условие наподобие value is None:
. В зависимости от ситуации важно проектировать, соблюдая баланс между краткостью и строгостью.
1def process_data(data=None):
2 if data is None:
3 data = []
4 print(data)
5
6process_data() # An empty list is used by default.
7process_data(0) # 0 is printed because it's not None.
- В этом коде переменная
data
инициализируется пустым списком только если она равнаNone
, в то время как другие ложные значения, например,0
, остаются без изменений.
Управление булевым значением в пользовательских объектах
Даже в собственных классах вы можете управлять булевым значением экземпляра, определяя методы __bool__()
или __len__()
.
1class MyContainer:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8box = MyContainer([])
9print(bool(box)) # False
10
11box.items.append("item")
12print(bool(box)) # True
- В этом коде метод
__len__()
приводит к тому, что контейнер оценивается какFalse
, когда он пустой, и какTrue
, когда в нём есть элементы.
Заключение
Понятия truthy
и falsy
в Python очень важны для написания лаконичных условных выражений и повышения интуитивной понятности кода. Понимание и правильное использование этих понятий может значительно улучшить читаемость и эффективность кода.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.