十二、迭代器和生成器
迭代器:以list为例
>>> help(list.__iter__)
Help on wrapper_descriptor:
__iter__(self, /)
Implement iter(self).
内部一个数据结构里面,如果还有下一个,把下一个拿给你,直到没有下一个了,迭代器的内部会执行next方法
>>> a = [1,2,3,4,5,6,7,8]
>>> iter(a)
<list_iterator object at 0x02AE4190>
>>> for i in iter(a):print (i)
1
2
3
4
5
6
7
8
生成器:
range不是生成器 xrange是生成器
readlines不是生成器 xreadlines是生成器
>>> range(1000000)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9。。。。。。。。。]
>>> xrange(1000000)
xrange(10000000)
总结:
以上面为例:
>>> range(1000000),它会在内存里不停的活动
>>> xrange(1000000),你创建多少都无所谓,我就是在内存里放着,你什么时候要用的时候我再创建
生成器内部基于yield创建,即:对于生成器只有使用时才创建,从而不避免内存浪费