python之迭代器与生成器

迭代器:

     迭代是python最强大的功能之一,是访问集合元素的一种方式。

     迭代器对象从集合的第一个元素开始访问,知道所有元素被访问结束。迭代器只能往前,不会后退。

     迭代器有2个基本方法:iter()next()

     字符串,列表或元组对象都可用于创建迭代器

     

 

 

        迭代器对象可以使用for语句进行遍历:

        

 

        结果为

 

        若你在遍历之前已经执行过一次next,那么遍历后的结果就只有2,3,4,5,6,7,8

         

 

 

 创建一个迭代器:

        把一个类作为一个迭代器使用需要在类中实现2个方法__iter__()与__next__()

        

 

生成器:

     在python中,使用了yield的函数被称为生成器。

       生成器是一个返回迭代器的函数,每次遇到yield的时候,函数会暂停并保持当前所有的运行,返回yield的值,

       并在下一次执行next()方法时从当前位置继续运行。

       调用一个生成器函数,返回的是一个迭代对象。

       

 

        执行以上程序,输出结果为:

 

        注: a,b=b,a+b   等同于  a=b   b=a+b

  

 yield备注解析:

  • end(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。——换句话说,就是send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,a = yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改yield 5表达式的值为10,本来是5的,那么a=10
  • send(msg)与next()都有返回值,它们的返回值是当前迭代遇到yield时,yield后面表达式的值,其实就是当前迭代中yield后面的参数
posted @ 2020-03-19 09:59  7dao  阅读(101)  评论(0编辑  收藏  举报