Логическите оператори и, или и не на Python (логическа конюнкция, дизюнкция, отрицание)

Бизнес

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

Ако искате да използвате или пред и, използвайте скоби().

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

<,>Тези оператори за сравнение имат дори по-висок приоритет от останалите. Затова не са необходими скоби за всяка операция за сравнение, както беше в примера по-горе.

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

Вижте официалната документация по-долу за обобщение на предимството на операторите в Python.

Логически оператори за обекти от тип, различен от bool

С тези логически оператори не само типове bool (true, false), но и числа, низове, списъци и т.н. се обработват като булеви стойности.

Следните обекти се считат за false в логическите операции на Python.

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

Всички други стойности се считат за верни.

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

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

Както можете да видите от примера по-горе, и и или в Python не връщат true или false от тип bool, а връщат стойността отляво или отдясно в зависимост от това дали е true или false. Примерът е за числови типове, но същото важи и за други типове, като например низове и списъци. Между другото, not връща 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

Когато стойностите на левия и десния израз са true и false поотделно, връщаните стойности са лесни за разбиране. От друга страна, ако и двете са 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)

Стойностите на връщане на и и или са обобщени в таблицата по-долу.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Късо съединение (оценка на късо съединение)

Както можете да видите от таблицата по-горе, ако x е false в x и y или ако x е true в 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