Логічні оператори 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

Насправді він часто використовується не для істинних чи хибних, а для умовних виразів з використанням операторів порівняння. Для вашої інформації, оператори порівняння такі.

  • <
  • >
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

Якщо ви хочете оперувати або перед і, використовуйте дужки().

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

<,>Ці оператори порівняння мають ще більший пріоритет, ніж ні. Таким чином, дужки не потрібні для кожної операції порівняння, як це було у наведеному вище прикладі.

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

Перегляньте офіційну документацію нижче для короткого опису пріоритету операторів у Python.

Логічні оператори для об’єктів іншого типу, ніж bool

With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.

Наступні об’єкти вважаються помилковими в логічних операціях Python.

  • Константи визначені як хибні: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’ в рядку як 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 and or у Python не повертають true чи false типу bool, а повертають значення ліворуч чи праворуч залежно від того, є воно true чи false. Приклад є числовим, але те саме стосується інших типів, таких як рядки та списки. До речі, не повертає true або false типу bool.

Визначення повернених значень і та або є такими.

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

Коли значення лівого і правого виразів є істинними і хибними окремо, повернуті значення легко зрозуміти. З іншого боку, якщо обидва істинні або обидва хибні, значення, що повертається, буде різним залежно від порядку.

Якщо ви використовуєте його як умовний вираз у операторі 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

Якщо ви хочете вважати це істинним або хибним, ви можете зробити, як в останньому прикладі.
bool(x and y)

Значення, що повертаються, і та або підсумовані в таблиці нижче.

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