Булевы операторы

Оператор И

Оценивает второй аргумент, если и только если оба аргумента верны. В противном случае оценивается первый аргумент Фальси.

x = True
y = True
z = x and y # z = True

x = True
y = False
z = x and y # z = False

x = False
y = True
z = x and y # z = False

x = False
y = False
z = x and y # z = False

x = 1
y = 1
z = x and y # z = y, so z = 1, see `and` and `or` are not guaranteed to be a boolean

x = 0
y = 1
z = x and y # z = x, so z = 0 (see above)

x = 1
y = 0
z = x and y # z = y, so z = 0 (see above)

x = 0
y = 0
z = x and y # z = x, so z = 0 (see above)

 

В 1 - х годов в приведенном выше примере , может быть изменен на любое значение truthy, и 0 -х может быть изменен на любое значение falsey.

Оператор ИЛИ

Оценивает первый правдивый аргумент, если один из аргументов правдив. Если оба аргумента ложны, оценивается второй аргумент.

 x = True
y = True
z = x or y # z = True

x = True
y = False
z = x or y # z = True

x = False
y = True
z = x or y # z = True

x = False
y = False
z = x or y # z = False

x = 1
y = 1
z = x or y # z = x, so z = 1, see `and` and `or` are not guaranteed to be a boolean

x = 1
y = 0
z = x or y # z = x, so z = 1 (see above)

x = 0
y = 1
z = x or y # z = y, so z = 1 (see above)

x = 0
y = 0
z = x or y # z = y, so z = 0 (see above)

 

В 1 - х годов в приведенном выше примере , может быть изменен на любое значение truthy, и 0 -х может быть изменен на любое значение falsey.

не

Возвращает противоположность следующего утверждения:

 x = True
y = not x # y = False

x = False
y = not x # y = True 

Оценка короткого замыкания

Python минимально оценивает логические выражения.

 >>> def true_func():
...     print("true_func()")
...     return True
... 
>>> def false_func():
...     print("false_func()")
...     return False
... 
>>> true_func() or false_func()
true_func()
True
>>> false_func() or true_func()
false_func()
true_func()
True
>>> true_func() and false_func()
true_func()
false_func()
False
>>> false_func() and false_func()
false_func()
False 

`and` и` or` не гарантированно возвращают логическое значение

При использовании or он будет либо вернуть первое значение в выражении , если это правда, иначе она будет слепо возвращать второе значение. Т.е. or эквивалентно:

 def or_(a, b):
    if a:
        return a
    else:
        return b

 

Для and , он возвращает его первое значение , если оно ложно, иначе она возвращает последнее значение:

 def and_(a, b):
    if not a:
        return a
    else:
        return b