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 з’яўляецца самым высокім.
not
and
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)
Зваротныя значэнні і і або зведзены ў табліцы ніжэй.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Кароткае замыканне (ацэнка кароткага замыкання)
Як вы можаце бачыць з прыведзенай вышэй табліцы, калі 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