python 迭代器,生成器详解。

迭代器

任何实现了__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>

猜你喜欢

转载自blog.csdn.net/m0_37156322/article/details/84532656