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
Як ви можете бачити з прикладу вище, 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)
Значення, що повертаються, і та або підсумовані в таблиці нижче.
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