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

Як вы можаце бачыць у прыведзеным вышэй прыкладзе, і і або ў Python не вяртаюць праўду або false тыпу bool, але вяртаюць значэнне злева або справа ў залежнасці ад таго, праўда гэта ці ілжыва. Прыклад з’яўляецца лікавым, але тое ж самае тычыцца іншых тыпаў, такіх як радкі і спісы. Між іншым, не вяртае праўду або 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