Оператор and в Python: выполнение логического И

В этом уроке вы узнаете о логическом операторе and в Python, а также о том, как использовать логическое И для управления процессом выполнения кода.

Содержание

Что такое оператор and в Python?

Оператор and в Python является логическим оператором И. Обычно вы используете оператор and для работы с логическими значениями и возврата логического значения.

Оператор and возвращает значение True, если оба операнда имеют значение True. В противном случае он возвращает False.

Следующая таблица истинности показывает результат оператора И:

X Y Х и Y
True True True
True False False
False False False
False True False

Эта таблица иллюстрирует два важных момента:

  • Если первый операнд (X) имеет значение True, результат оператора and зависит от результата второго операнда (Y).
  • Если первый операнд (X) имеет значение False, результат оператора and всегда будет False независимо от значения второго операнда (Y).

Ниже показан пример использования оператора and:

timeout = False
pending_job = True
execute_next = timeout and pending_job

print(execute_next)

Выход:

False

В этом примере timeout имеет значение False, а pending_job — True. Таким образом, результат выражения timeout и pending_job равен False.

Оператор and вызывает короткое замыкание

Ключевой особенностью оператора and является его короткое замыкание. Это означает, что если первый операнд имеет значение False, оператор and не будет оценивать второй операнд. Причина в том, что у него уже есть вывод о результате, который является ложным.

В следующем примере возникает ошибка ZeroDivisionError:

a = 10
b = 0
c = a / b
print(c)

В этом примере, поскольку b равно нулю, a/b определенно вызывает исключение деления на ноль.

Однако следующий пример не приведет к возникновению ошибки ZeroDivisionError:

a = 10
b = 0
c = b and a/b
print(c)

Выход:

0

В этом примере мы использовали оператор and в выражении:

c = b and a/b

Поскольку b равно нулю, что является ложным, оператор and может вывести результат всего выражения, который является ложным, независимо от результата второй части a/b. Следовательно, оператору and не требуется вычислять выражение a/b. На самом деле это не так.

В следующем примере значение b изменяется на 5:

a = 10
b = 5
c = b and a/b
print(c)

Выход:

2.0

В этом примере b равно 5, что соответствует действительности. Поскольку первый операнд имеет значение True, значение всего выражения зависит от значения второго операнда, то есть a/b.

Эти примеры показывают, что оператор and может работать с нелогическими значениями и возвращает логическое значение, не являющееся значением.

В общем, вы можете использовать оператор и для объектов:

bool(object1) and bool(object2)

На самом деле вам не нужно использовать конструктор bool():

object1 and object2

В этом случае оператор and возвращает объект object1, если он ложный. В противном случае он возвращает объект2.

Выражение

c = b and a/b

эквивалентно следующему:

if b:
    c = a / b
else:
    c = b

Используя оператор and, вы можете контролировать ход выполнения программы.

Пример кода с использованием оператора and

Ниже определяется функция avg(), которая вычисляет среднее значение чисел:

def avg(*numbers):
    total = sum(numbers)
    n = len(numbers)
    if n > 0:
        return total / n
    return 0


if __name__ == "__main__":
    print(avg(1, 2, 3))

Выход:

2

Как это работает.

  • Сначала вычислите сумму чисел с помощью функции sum().
  • Во-вторых, получите числовые значения с помощью функции len().
  • В-третьих, верните среднее значение, если количество чисел больше нуля, в противном случае верните ноль.

Основной блок вычисляет среднее значение трех чисел 1, 2 и 3, что возвращает 2,0, как и ожидалось.

Следующий код использует оператор if и возвращает среднее значение, если количество чисел больше нуля. В противном случае возвращается ноль:

if n > 0:
    return total / n
return 0

Фактически, вы можете использовать оператор и, чтобы сделать этот код более кратким, например:

return n and total / n

В этом случае, если n равно нулю, оператору and не нужно вычислять выражение total / n, и он возвращает ноль. В противном случае он оценивает общее количество /n и возвращает его.

Вот новая версия функции avg(), использующая оператор and:

def avg(*numbers):
    total = sum(numbers)
    n = len(numbers)

    return n and total / n
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *