迭代器和生成器
Posted henji1266
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器和生成器相关的知识,希望对你有一定的参考价值。
一、迭代器
--迭代器是拥有了__iter__和__next__方法的一个类实例化的对象,for循环调用__next__方法来完成迭代器的循环。
--迭代器是生成数据的方式方法,不是生产数据的结果,list upleset是保存数据的集合,是数据的结果
--迭代器的好处:节省了内存中保存列表、元祖等容器的空间,并且在调用时完成循环的目的。
--实现方式:
Class A:
def __init__()
代码块:计数器的初始化等
def __iter__():
return self # 返回一个可迭代对象
def __next__():
实现数据的依次提,在此处增加一个计数器。
二、生成器
--生成器是特殊的迭代器,都是拥有__iter__()和__next__()方法
--生成器的生成方式
定义一个函数:
把return 换成yield,yield与return的不同,return会直接返回函数的返回值并结束函数,yield会返回一个返回值,并且会在此处进行暂停,直到执行next方法后,程序才会继续往下执行。
该函数其实是定义了一个生成器模板,是用来生成生成器的,效果类似于一个类,当调用该函数时,并不是返回一个返回值,而是返回了一个生成器对象,当该生成器调用next函数时(next(生成器对象)),才会把yield后面的值进行返回。
--生成器可以理解为一个特殊的函数,只不过用yield来代替return,且调用函数时返回的是一个生成器,也即是一个迭代器,一个生成数据的方式,而不是一个数据结果,必须对该迭代器对象调用next方法,才会返回值。
--实现方式:
def xx():
while True:
yield a
xxx代码块
三、生成器实现多任务(协程)
--使用yield方法,使子函数暂停,然后返回主函数,执行另一个子函数,再用yield,使函数返回,然后交替执行任务。
以上是关于迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章