生成器和迭代器
第一、 列表生成式
|
1
|
l = [x*x for x in range(10)] |
通过列表生成式可以快速从一个list推导出另外一个list(也就是说,我们获得了一个完整的列表)
但是由于内存的限制,列表容量肯定是有限的;如果列表元素很多(100万以上啥的),这样采用列表生成式可能会不符合现实需求。
如果能够按照某种算法推算出来的,就不用创建完整list,则产生生成器
第二、生成器(generator): 是python中一边循环一边计算的机制。
generator的创建方法1: 将列表生成式的[ ]变( )
|
1
|
g = (x*x for x in range(10)) |
这时候的g是个生成器,如何打印list的每个元素呢?
采用1: next(g)
也就是说每次调用next(g),就计算出g的下一个元素值,直到计算到最后一个元素。
采用2:
|
1
2
|
for n in g: print(n) |
generator的创建方法2:在函数中定义包含yield的关键字

第三、迭代器 ITERATOR
可以直接作用于for循环的数据类型就是迭代对象(iterable)
如:集合数据类型,包括list, tuple, dict, set, str等
generator,包括生成器和带yield的生成函数
用isinstance()判断是否为迭代对象
迭代器的概念: 可以被被next()函数调用,并不断返回下一个值的对象是迭代器
用iter()函数将迭代对象变为迭代器
通过程序具体看下:


这么看来,生成器和迭代器之间的区别是啥?
生成器是一种特殊的迭代器

浙公网安备 33010602011771号