函数式编程 - 惰性求值



惰性求值是一种求值策略,它会延迟表达式的求值,直到需要它的值为止。它避免了重复求值。Haskell就是一个很好的例子,这种函数式编程语言的基础就是惰性求值。

惰性求值用于Unix映射函数以提高其性能,方法是从磁盘加载仅需的页面。不会为其余页面分配内存。

惰性求值 - 优点

  • 它允许语言运行时丢弃与表达式最终结果没有直接关联的子表达式。

  • 它通过丢弃临时计算和条件语句来减少算法的时间复杂度。

  • 它允许程序员在初始化数据结构的组件后,以任意顺序访问它们,只要它们没有循环依赖关系。

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

惰性求值 - 缺点

  • 它迫使语言运行时通过创建thunk(延迟对象)来保持子表达式的求值,直到它在最终结果中需要为止。

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

  • 很难找到它的性能,因为它在执行之前包含表达式的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 
广告