Операторы true и false — обрабатывают объекты как логическое значение.
Оператор true возвращает значение bool true , указывая, что его операнд имеет значение true. Оператор false возвращает значение bool true , указывая, что его операнд имеет значение false. Операторы true и false не обязательно дополняют друг друга. То есть оба оператора true и false могут вернуть значение bool false для одного операнда. Если тип определяет один из двух операторов, он должен также определять другой оператор.
Используйте тип bool? , если вам нужно использовать трехзначную логику (например, при работе с базами данных, которые поддерживают трехзначный логический тип). В C# предоставляются операторы & и | , которые поддерживают троичную логику с операндами bool? . См. подробнее о логических операторах, поддерживающих значение NULL в описании логических операторов.
Логические выражения
Тип с определенным оператором true может быть типом результата управляющего условного выражения в операторах if, do, while и for и условном операторе ?: . Дополнительные сведения см. в описании логических выражений в спецификации языка C#.
Пользовательские условные логические операторы
Если тип с определенными операторами true и false перегружает логические операторы OR | или AND & определенным образом, условные логические операторы OR || или AND && соответственно могут вычисляться для операндов этого типа. Дополнительные сведения см. в разделе Пользовательские условные логические операторы в Спецификации языка C#.
Пример
В следующем примере представлен тип, который определяет операторы true и false . Этот тип также перегружает логический оператор И & таким образом, что оператор && может быть вычислен для операндов этого типа.
public struct LaunchStatus < public static readonly LaunchStatus Green = new LaunchStatus(0); public static readonly LaunchStatus Yellow = new LaunchStatus(1); public static readonly LaunchStatus Red = new LaunchStatus(2); private int status; private LaunchStatus(int status) < this.status = status; >public static bool operator true(LaunchStatus x) => x == Green || x == Yellow; public static bool operator false(LaunchStatus x) => x == Red; public static LaunchStatus operator &(LaunchStatus x, LaunchStatus y) < if (x == Red || y == Red || (x == Yellow && y == Yellow)) < return Red; >if (x == Yellow || y == Yellow) < return Yellow; >return Green; > public static bool operator ==(LaunchStatus x, LaunchStatus y) => x.status == y.status; public static bool operator !=(LaunchStatus x, LaunchStatus y) => !(x == y); public override bool Equals(object obj) => obj is LaunchStatus other && this == other; public override int GetHashCode() => status; > public class LaunchStatusTest < public static void Main() < LaunchStatus okToLaunch = GetFuelLaunchStatus() && GetNavigationLaunchStatus(); Console.WriteLine(okToLaunch ? "Ready to go!" : "Wait!"); >static LaunchStatus GetFuelLaunchStatus() < Console.WriteLine("Getting fuel launch status. "); return LaunchStatus.Red; >static LaunchStatus GetNavigationLaunchStatus() < Console.WriteLine("Getting navigation launch status. "); return LaunchStatus.Yellow; >>
Обратите внимание на поведение сокращенного вычисления оператора && . GetFuelLaunchStatus Когда метод возвращает LaunchStatus.Red значение , правый операнд && оператора не вычисляется. Это обусловлено тем, что LaunchStatus.Red имеет значение false. Результат логического оператора И не зависит от значения правого операнда. Выходные данные примера могут быть следующими:
Getting fuel launch status. Wait!
См. также раздел
- справочник по C#
- Операторы и выражения C#
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Используем объекты вместо 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() никуда не годится что с булевским контекстом, что без него.
Перевод «true, false» на русский
Именно поэтому приходится оперировать тремя логическими значениями — true, false и unk (производная от unknown).
Note: generally, numeric values, logical values (TRUE, FALSE), text values (must be quoted), cell references, cell range references and other functions can be used as function arguments.
Примечание: в общих случаях, в качестве аргументов функций можно использовать числовые значения, логические значения (ИСТИНА, ЛОЖЬ), текстовые значения (они должны быть заключены в кавычки), ссылки на ячейки, ссылки на диапазоны ячеек и другие функции.
Boolean — Базовые типы данных в Python: Булев, или логический тип

Следующая статья будет полезна тем, кто только начал знакомиться с особенностями программирования на Python. Здесь будет рассмотрен один из ключевых типов данных Python — булев тип. Булев, или логический тип, является важным концептом программирования, который принимает истинное (true) или ложное (false) значение.
Булев тип данный в Python 3
Булев концепт присутствует в каждом языке программирования. Булев тип данных реализует идею истины (true) или лжи (false). Во время составления программы часто всплывают моменты, когда в зависимости от ситуации требуется выполнить различные участки кода. Для этого нужен булев тип.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!