Что выведет этот код?


def f():
    print("f() вызвана")
    return True

print(True or f())

Результат выполнения кода будет:
True
Функция f() не будет вызвана. Это происходит из-за того, что в Python (и большинстве других языков программирования) логическое "или" (or) использует "ленивое" вычисление. Как только первая часть выражения (True) вычисляется в True, результат всего выражения уже известен (True), и вторая часть (f()) не вычисляется.

Разбор кода:

Данный код демонстрирует принцип "ленивого вычисления" (short-circuit evaluation) в Python для логического оператора or.

Поведение оператора or:

  • Оператор or возвращает True, если хотя бы один из операндов является True.
  • Python вычисляет операнды слева направо.
  • Ключевой момент: Если первый операнд or оценивается как True, то второй операнд не вычисляется. Это происходит потому, что результат всего выражения уже известен и равен True. Нет необходимости вычислять второй операнд.

В нашем случае:

  1. print(True or f())
  2. Первый операнд, True, оценивается как True.
  3. Поскольку первый операнд уже равен True, Python знает, что результат всего выражения True or ... будет True.
  4. Поэтому функция f() не вызывается.

Результат выполнения кода:

В консоль будет выведено только:

True

Строка "f() вызвана" не будет выведена, потому что функция f() не была вызвана.

Важность знания принципа ленивого вычисления:

Этот принцип важен для оптимизации кода и избежания нежелательных побочных эффектов. Например, если вы поместите в качестве второго операнда ресурсоемкую операцию или функцию, которая изменяет состояние программы, вы можете избежать её выполнения, если первый операнд будет истинным.

0