Ленивая оценка — это стратегия оценки, которая удерживает оценку выражения до тех пор, пока не потребуется его значение. Это позволяет избежать повторной оценки. Haskell — хороший пример такого функционального языка программирования, основы которого основаны на Lazy Evaluation.
Ленивая оценка используется в функциях карт Unix для повышения их производительности путем загрузки только необходимых страниц с диска. Для оставшихся страниц память не будет выделена.
Ленивая оценка — преимущества
-
Это позволяет языковой среде выполнения отбрасывать подвыражения, которые не связаны напрямую с конечным результатом выражения.
-
Это уменьшает временную сложность алгоритма, отбрасывая временные вычисления и условные выражения.
-
Это позволяет программисту получать доступ к компонентам структур данных вне их порядка после их инициализации, если они свободны от каких-либо циклических зависимостей.
-
Лучше всего подходит для загрузки данных, к которым редко обращаются.
Это позволяет языковой среде выполнения отбрасывать подвыражения, которые не связаны напрямую с конечным результатом выражения.
Это уменьшает временную сложность алгоритма, отбрасывая временные вычисления и условные выражения.
Это позволяет программисту получать доступ к компонентам структур данных вне их порядка после их инициализации, если они свободны от каких-либо циклических зависимостей.
Лучше всего подходит для загрузки данных, к которым редко обращаются.
Ленивая оценка — недостатки
-
Это заставляет языковую среду выполнения хранить оценку подвыражений до тех пор, пока она не потребуется в конечном результате, создавая thunks (объекты с задержкой).
-
Иногда это увеличивает пространственную сложность алгоритма.
-
Очень сложно найти его производительность, потому что он содержит множество выражений перед их выполнением.
Это заставляет языковую среду выполнения хранить оценку подвыражений до тех пор, пока она не потребуется в конечном результате, создавая thunks (объекты с задержкой).
Иногда это увеличивает пространственную сложность алгоритма.
Очень сложно найти его производительность, потому что он содержит множество выражений перед их выполнением.
Ленивая оценка с использованием Python
Метод диапазона в Python следует концепции Lazy Evaluation. Это экономит время выполнения для больших диапазонов, и нам никогда не требуются все значения за раз, поэтому также экономит потребление памяти. Посмотрите на следующий пример.
r = range(10) print(r) range(0, 10) print(r[3])
Это даст следующий результат —