lambda表达式是否是惰性求值?

来源:1-2 开发环境配置

时间流逝unity

2018-06-17

l = [lambda x=x:id(x) for x in range(10)]
for i in l:

   print(isinstance(i, Iterable))

   print(i())

如果去掉x=x默认参数则引用同一个变量,请问这是为什么?网上说法是惰性求值,但惰性求值意味着他是一个生成器,但l并不是生成器里面的元素只是个普通函数?

写回答

2回答

Ethreal

2018-06-18

根据你这提问的问题来说 首先lambda表达式是匿名函数 他说为了解决一些功能很小又不值当单独写一个函数来命名,本身起到的作用就是函数速写,他里面的表达式可以是任何跟惰性求值没有关系,惰性求值是在进行循环遍历的时候在开始,在此之前也可以不存在,因为你用的是range函数 在python2中他是直接返回列表 python3中将Python2中的xrange生成器变成了python3的range 

0
1
时间流逝unity
那为什么去掉x=x默认参数,结果输出全是9,而加上默认参数输出0-9?
2018-06-18
共1条回复

时间流逝unity

提问者

2018-06-17

加上x=x默认参数则应用不同变量?

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程