黄哥Python:Python 惰性求值(英语:Lazy Evaluation)

在编程语言理论中,惰性求值(英语:Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need),是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。它有两个相关而又有区别的含意,可以表示为“延迟求值”和“最小化求值”,除可以得到性能的提升外,惰性计算的最重要的好处是它可以构造一个无限的数据类型。

惰性求值的相反是及早求值,这是一个大多数编程语言所拥有的普通计算方式。

延迟求值特别用于函数式编程语言中。在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值,也就是说,语句如x:=expression; (把一个表达式的结果赋值给一个变量)明显的调用这个表达式被计算并把结果放置到x中,但是先不管实际在x中的是什么,直到通过后面的表达式中到x的引用而有了对它的值的需求的时候,而后面表达式自身的求值也可以被延迟,最终为了生成让外界看到的某个符号而计算这个快速增长的依赖树。

以上内容来源于维基百科

有网友问:

li = [lambda :x for x in range(10)]

res = li[0]()

print(res)

#输出:9


想问一下问什么输出是9啊?



黄哥Python回答: 由于编程语言延迟求值的特性,在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值,

当调用li[0]() 函数时,x的值已经是9了,所以输出的是9



如何修改为正常的输出0 1 2 3 4 5 6 7 8 9 呢?

定义函数时,添加默认参数即可。


li2 = [lambda x=x:x for x in range(10)]

res = li2[0]()

print(res)
for i in li2:
    print(i(), end=" ")

黄哥谈转行当程序员

黄哥谈转行当程序员之二


黄哥Python提醒:转行当程序员修炼之路



请看看我写的文章

编辑于 2021-12-18 12:50