迭代器
任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器
迭代器可以被next()函数调用并不断返回下一个值的,或者使用for循环。
因为Python的for循环本质上就是通过不断调用next()函数实现的。
for 循环在处理这些数据前,会调用 __ iter__() 方法,将这些数据转化为一个迭代器,然后调用迭代器的 __ next__() 方法,并捕获StopIteration异常,也就实现了遍历完所有数据就会结束,并不会抛出这个异常。
list、set、dict都是可迭代对象(Iterable),但不是迭代器对象(Iterator),不可以使用next()函数调用取下一个值。
可以
生成器
生成器是一种特殊的迭代器,通过在函数中用yield字段返回数据或者生成器表达式(generator expression)完成。可使用next()方法依次获取下一个值,也可以使用list()直接转化为列表对象。
def foo1():
for i in range(10):
yield i
tmp = (x for x in range(10))
tmp
Out[67]: <generator object <genexpr> at 0x08C59270>