函数式编程 - 惰性求值


惰性求值是一种求值策略,它保留表达式的求值,直到需要它的值为止。避免了重复评估。Haskell是这种函数式编程语言的一个很好的例子,它的基础是基于惰性计算的。

Unix 映射函数中使用惰性求值,通过仅从磁盘加载所需的页面来提高其性能。不会为剩余页面分配内存。

惰性评估 - 优点

  • 它允许语言运行时丢弃不直接链接到表达式最终结果的子表达式。

  • 它通过丢弃临时计算和条件来降低算法的时间复杂度。

  • 它允许程序员在初始化后无序访问数据结构的组件,只要它们不存在任何循环依赖关系。

  • 它最适合加载不经常访问的数据。

惰性评估 - 缺点

  • 它强制语言运行时保留子表达式的计算,直到通过创建thunk(延迟对象)在最终结果中需要它为止。

  • 有时它会增加算法的空间复杂度。

  • 很难发现它的性能,因为它在执行之前包含大量的表达式。

使用 Python 进行惰性求值

Python 中的 range方法遵循惰性求值的概念。它节省了更大范围的执行时间,并且我们从不需要一次需要所有值,因此它也节省了内存消耗。看一下下面的例子。

r = range(10) 
print(r) 
range(0, 10) 
print(r[3]) 

它将产生以下输出 -

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
3