Логические значения `truthy` и `falsy` в Python

Логические значения `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-канал.

YouTube Video