迭代器和生成器
- 可迭代对象:任何你可以用
for ... in ...
的对象都是可迭代对象, list,strings, files, sockets…。 当你创建一个list的时候,你一个个的获取list里面的值,这就是可迭代对象
mylist = [1, 2, 3] for i in mylist: print(i)
- 迭代器:它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了_iter_和_next_()(python2中实现next())方法的对象都是迭代器, 有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。
from itertools import count counter = count(start=13) next(counter) # 13
- 生成器:迭代器的一种, 它不需要写
__iter__()
和__next__()
方法,只需要一个yield关键字, 但是生成器只能迭代一次. 生成器只会在调用的时候产生值,他不会提前将值存储在内存中
mygenerator = (x*x for x in range(3)) for i in mygenerator: print(i)