Логические операторы Python and, or, and not (логическая связь, дизъюнкция, отрицание)

Бизнес

Python предоставляет логические операторы для выполнения логических (булевых) операций.(and,or,not)
Он используется для описания взаимосвязи между несколькими условиями в операторе if.

В этом разделе описано следующее.

  • перекресток: and
  • логическое дополнение: or
  • отказ: not
  • and,or,notСтаршинство операторов

Кроме того, следующие моменты объясняются как предостережения.

  • Логические операторы для объектов типа, отличного от bool
  • and,orЭти возвращаемые значения не обязательно имеют тип bool.
  • Короткое замыкание (оценка короткого замыкания)

перекресток: and

и возвращает логическое произведение двух значений.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

На самом деле, он часто используется не для true или false, а для условных выражений с использованием операторов сравнения. Для справки, операторы сравнения выглядят следующим образом.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

и могут быть конкатенированы следующим образом.

print(0 < a < 100)
# True

логическое дополнение: or

или возвращает логическое ИЛИ двух значений.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

отказ: not

not» возвращает отрицание значения; true и false меняются местами.

print(not True)
# False

print(not False)
# True

and,or,notСтаршинство операторов

Порядок старшинства этих логических операторов следующий: not — наивысший.

  1. not
  2. and
  3. or

В следующем примере кода приведенное выше выражение интерпретируется так, как если бы это было выражение, приведенное ниже. Поскольку нет никакой проблемы с лишними круглыми скобками, может быть проще четко описать их в случаях, подобных этому примеру.

print(True or True and False)
# True

print(True or (True and False))
# True

Если вы хотите использовать операцию or перед and, используйте круглые скобки().

print((True or True) and False)
# False

<,>Эти операторы сравнения имеют даже больший приоритет, чем not. Поэтому для каждой операции сравнения не обязательно использовать круглые скобки, как это было в приведенном выше примере.

print(0 < a and a < 100)
# True

Краткое описание старшинства операторов в Python см. в официальной документации ниже.

Логические операторы для объектов типа, отличного от bool

С помощью этих логических операторов в качестве булевых значений обрабатываются не только типы bool (true, false), но и числа, строки, списки и т.д.

Следующие объекты считаются ложными в логических операциях Python.

  • Константы, определенные как false: None,false
  • Обнуление в числовых типах: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Пустая последовательность или коллекция: '',(),[],{},set(),range(0)

Все остальные значения считаются истинными.

Функция bool() может быть использована для получения булева значения объекта. Обратите внимание, что строка '0' или 'False' считается истиной.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Чтобы считать '0' или 'false' в строке ложью, используйте distutils.util.strtobool().

and,orЭти возвращаемые значения не обязательно имеют тип bool.

Вот пример объекта, отличного от типа bool, показывающий результат работы каждого оператора над числовым значением.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Как видно из приведенного примера, and и or в Python не возвращают true или false типа bool, а возвращают значение слева или справа в зависимости от того, true оно или false. Пример относится к числовым типам, но то же самое применимо и к другим типам, таким как строки и списки. Кстати, not возвращает true или false типа bool.

Определения возвращаемых значений and и or следующие.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Когда значения левого и правого выражений по отдельности являются true и false, возвращаемые значения легко понять. С другой стороны, если оба выражения истинны или оба ложны, возвращаемое значение будет различным в зависимости от порядка.

Если вы используете его в качестве условного выражения в операторе if и т.д., результат будет считаться булевым значением и обрабатываться, поэтому вам не нужно беспокоиться об этом, но если вы используете возвращаемое значение для дальнейшей обработки, вам нужно быть осторожным.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Если вы хотите рассматривать его как true или false, вы можете сделать так, как в последнем примере.
bool(x and y)

Возвращаемые значения and и or приведены в таблице ниже.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Короткое замыкание (оценка короткого замыкания)

Как видно из приведенной выше таблицы, если x ложно в x и y, или если x истинно в x или y, возвращаемое значение будет x, независимо от значения y.

В этом случае y не оценивается.

and,orОбратите внимание, что если вы вызываете функцию или метод в правой части этих процессов для выполнения некоторой обработки, процесс может не выполняться в зависимости от результата в левой части.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True
Copied title and URL