Перейти к содержимому

Bool python что это

  • автор:

Используем объекты вместо 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

Наши условия использования и конфиденциальности

Get it on Google Play

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

Курсы Робикс, в которых изучается этот материал.

  1. Программирование на Python в Minecraft
  2. 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(), следующий элемент асинхронного итератора

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *