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
.or
оценивается как True
, то второй операнд не вычисляется. Это происходит потому, что результат всего выражения уже известен и равен True
. Нет необходимости вычислять второй операнд.В нашем случае:
print(True or f())
True
, оценивается как True
.True
, Python знает, что результат всего выражения True or ...
будет True
.f()
не вызывается.Результат выполнения кода:
В консоль будет выведено только:
True
Строка "f() вызвана"
не будет выведена, потому что функция f()
не была вызвана.
Важность знания принципа ленивого вычисления:
Этот принцип важен для оптимизации кода и избежания нежелательных побочных эффектов. Например, если вы поместите в качестве второго операнда ресурсоемкую операцию или функцию, которая изменяет состояние программы, вы можете избежать её выполнения, если первый операнд будет истинным.