关于Python的生成器的一些简单问题。我关于生成器这部分学得有点晕,如果问题问的有点傻请请不要介意。
1.generator的本质是否就是列出一段算式,然后让计算机自己推导?2.生成器和循环以及列表生成式有什么区别?3.generator能不能用索引?...
1.generator的本质是否就是列出一段算式,然后让计算机自己推导?2.生成器和循环以及列表生成式有什么区别?3.generator能不能用索引?
展开
2个回答
展开全部
不是。生成器不涉及到任何推导。只是定义好计算方式,每次调用仅生成一个数据(执行到下一次yield)即返回调用端。
生成器是一种(惰性)生成数据的方式。循环是一种程序结构控制工具/语法。列表生成式是生成列表的一种语法结构。这些东西都可以用来做遍历、迭代。各有优缺点。
generator不支持索引。
常用程序里面生成器使用场景并不多,如果不理解可以先略过。生成器的优点是可以支持惰性计算;可以用来做执行流程跳转。缺点在于只能遍历一次;调试不方便。
追问
>>> g = (x * x for x in range(10))
>>> g
at 0x104feab40>
那这个程序最后的g返回的一段是怎么回事?
追答
这个是 generator expression,和 generator function 是不一样的。通常单独提generator指的是 generator function.
generator expression和list comprehension写法比较接近,只是结果返回的形式也是一个generator。这里打印的g表示g是一个generator expression, 因为是惰性的,所以直接打印g不会做任何实际运算。如果要获取g里面的元素,需要遍历。比如for循环,或者转换为list.
2016-06-23
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询