Используем объекты вместо True и False — truthy и falsy значения в Python
Рассказываем про ложные и истинные значения, что их делает таковыми и как, используя истинные значения, можно сократить код.
Автор перевода Алексей Морозов
Значения вместо булевых переменных
В Python, как и в других языках, есть логический тип переменных bool, который имеет всего два значения: True (истина) и False (ложь). Его возвращают логические операторы (например сравнение чисел или проверка присутствия элемента в списке), и именно этот тип обычно используется в if и while. Тем не менее, явно использовать bool или операторы необязательно: существуют правила, по которым значение любого типа приводится к True или False.
Прим. пер. По-английски это называется truthy и falsy, то есть «примерно-но-не-совсем-истинные», «истинноватые» значения. Общепринятого русского перевода нет, но в этой статье под истинным или ложным значением объекта всегда подразумеваются именно эти штуки, а булевы значения везде названы True и False.
Вот как это работает:
>>> a = 5 >>> if a: print(a) # Вывод 5 >>> a = 0 >>> if a: print(a) # Ничего не выводится
Булев контекст
Любое значение в Python при необходимости может интерпретироваться как True или False в соответствии с правилами языка. Об этом написано и в документации:
Любой объект может быть протестирован на истинность и использован в условиях if и while, а также как операнд булевых операций (and, or, not).
Если объект используется таким образом, то он находится в булевом контексте. Грубо говоря, это такое место в коде, которое требует от объекта значения либо True, либо False.
В булевом контексте может использоваться как переменная, так и выражение. Если используется выражение, значит, оценивается истинность его результата.
Объекты, которые приравниваются к False
Любой объект, для которого определен метод __len__ , возвращающий для этого объекта 0, является falsy. Документация:
По умолчанию объект считается истинным, если его класс не определяет метод __bool__, возвращающий для объекта False, или метод __len__, возвращающий для него ноль.
Последовательности и коллекции
- пустой список: [];
- пустой кортеж: ();
- пустой словарь: <>;
- пустое множество: set();
- пустая строка: “”;
- пустой диапазон: range(0).
Нули любых численных типов
- целочисленный ноль: 0;
- ноль с плавающей точкой: 0.0;
- комплексный ноль: 0j.
Константы
Объекты, которые приравниваются к True
По умолчанию любой объект имеет истинное значение.
В частности, истинными являются:
- все непустые последовательности и коллекции (списки, кортежи, словари, множества, диапазоны и строки);
- все ненулевые числа;
- True.
Функция bool()
С помощью этой функции можно проверить истинность или ложность любого значения. Согласно документации, она:
Возвращает булево значение, т. е. либо True, либо False. Аргумент x конвертируется с использованием стандартной процедуры проверки истинности.
>> bool(5) True >>> bool(0) False
Передавать этой функции можно как значение, так и содержащую его переменную.
Зачем это нужно?
Преимущество истинных и ложных значений в том, что они позволяют сделать код кратким и понятным. Вот два примера:
Пример 1, с сообщением об ошибке
Допустим, у нас есть функция print_even(), которая принимает в качестве аргумента список или кортеж чисел и печатает его чётные элементы. Если список пустой, то выводится сообщение:
def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("Пустой список в аргументе")
Обратите внимание на эту строчку:
if len(data) > 0:
Её можно сократить до:
if data:
Если список пустой, data имеет ложное значение. Если он не пустой (то есть его длина больше нуля), то истинное. Тот же результат достигается меньшим количеством кода:
def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("Пустой список в аргументе")
Пример 2, с исключением
Можно использовать истинные/ложные значения, чтобы выбросить исключение, если аргумент некорректен.
>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)
Если список data пустой:
- data имеет ложное значение, эквивалентное False;
- поэтому not data эквивалентно not False, то есть True;
- поэтому условие if истинно;
- поэтому бросается исключение.
Если список не пустой:
- data имеет истинное значение, эквивалентное True;
- поэтому not data эквивалентно not True, то есть False;
- поэтому условие if ложно;
- поэтому исключение не бросается.
Истинные и ложные значения произвольных объектов
Если вы хотите, чтобы у ваших объектов были не только истинные значения, можно добавить к классу метод __bool__() и задать в нём правила, по которым будет определяться истинность или ложность объекта.
Например, у нас есть вот такой класс:
>>> class Account: def __init__(self, balance): self.balance = balance
Поскольку у него нет специальных методов, все объекты этого класса имеют истинное значение:
>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True
Это можно исправить, добавив __bool__():
>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0
Теперь объект имеет истинное значение, пока на счету больше нуля. При нулевом или отрицательном балансе значение будет ложным.
>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False
Если у класса нет метода __bool__(), но есть метод __len__(), то истинность объекта определяется истинностью того, что возвращает __len__().
Вот так работает механизм, позволяющий использовать любые объекты в качестве булевых. С его помощью можно сделать код проще и понятнее; важно только не забывать осмысленно называть переменные — какое-нибудь pabotat() if cnucok_2 else He_pabotat() никуда не годится что с булевским контекстом, что без него.
Bool python что это



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Логический тип данных в Python: Boolean
Логический тип данных Boolean в Python, элементы логики, логические операторы Python.
Элементы логики
В жизни мы регулярно сталкиваемся с выражениями. Например: «Робикс — это кружок робототехники». Это верное выражение, так как это общеизвестный факт. В программировании такие выражения называются истинными.
Рассмотрим другое выражение: «Робикс — это кружок рисования». Как нам известно, это неверное выражение, то есть ложное.
Логический тип данных (тип bool) имеет всего два возможных значения: True (истина) и False (ложь).
>>> a = True >>> b = False >>> a True >>> b False
В программировании ложные выражения обычно приравнивают к нулю, а True — к единице. Чтобы в этом убедиться, можно преобразовать значения переменных к целочисленному типу:
>>> int(a) 1 >>> int(b) 0
Название логического типа данных (Boolean) принято всегда писать с заглавной буквы, так как оно связано с одним из основателей математической логики Джорджа Буля. Также с заглавной буквы пишутся значения True и False.
Логические операторы
В программировании используются специальные знаки, отражающие отношение отдельных данных (объектов):
| > | больше |
| меньше | |
| >= | больше или равно |
| меньше или равно | |
| == | равно |
| != | не равно |
Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение — это разные операции.
>>> a == b False >>> a < b False >>> a > b True
Теперь попытаемся сравнить строки:
>>> 'Ass' == 'Ase' False
Курсы Робикс, в которых изучается этот материал.
- Программирование на Python в Minecraft
- Duckietown робот с системой Автопилота
Класс bool() в Python, логическое значение объекта
Позволяет проверить/узнать логическое значение объекта
Синтаксис:
bool(object)
Параметры:
- object — любой объект, как строка, список, число и т. д.
Возвращаемое значение:
- bool — логическое значение указанного объекта.
Описание:
Класс bool() возвращает логическое значение указанного объекта, True или False
Объект всегда будет возвращать False , если:
- Объект пуст — [] , () , <> ;
- Пустая строка » ;
- Объект — False ;
- Объект равен 0 ;
- Объект — None .
На практике редко вручную пользуются переменными типа bool , которые воспроизводятся логическими проверками, потому что логические результаты автоматически используются инструкциями if . else и другими средствами выбора.
Примеры проверки объекта на его логическое значение.
x = bool(10) print(x) # Вывод True x = bool(0) print(x) # Вывод False x = bool([0]) print(x) # Вывод True x = bool([]) print(x) # Вывод False
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора