迭代器和生成器
迭代意味着重复多次,是实现了__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 用于停止生成器,无需提供参数