迭代器和生成器

迭代意味着重复多次,是实现了__iter__的对象,包含了__next__方法

当调用__next__时迭代器返回下一个值,如果没有可供返回的值,引发StopTteration异常,也可以使用等价的next()函数

nest(it)等效于__next__(it)

实现了方法__iter__的对象是可迭代的,实现了__next__的对象是迭代器

 

***************************************************************************************************

生成器是一种使用普通函数语法定义的迭代器

通过一个例子来说明

nested = [[1, 2], [3, 4], [5, 6]]
def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element
#包含yield语句函数都被成为生成器
#生成器不使用return返回值,而是可以生成多个值,每次一个
#每次使用yield生成一个值后函数都将被冻结,等待重新唤醒
#被唤醒后,从停止的地方重新开始执行

for num in flatten(nested):
    print(num)

生成器由两个单独的部分组成:生成器函数和生成器的迭代器,生成器的函数由def定义,其中包含yield;生成器的迭代器是这个函数的返回结果

生成器方法:

send() 在外部世界向生成器发送一个参数

throw   用于在yield处引发异常,可提供一个异常类型,一个可选值和一个traceback对象

close   用于停止生成器,无需提供参数

 

posted on 2019-05-14 15:14  低调的蛋疼疼  阅读(126)  评论(0编辑  收藏  举报