码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器和生成器

时间:2019-12-15 18:52:15      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:容器   yield   列表   方式   依次   生成器   而不是   sel   inf   

一、迭代器

  --迭代器是拥有了__iter__和__next__方法的一个类实例化的对象,for循环调用__next__方法来完成迭代器的循环。

  --迭代器是生成数据的方式方法,不是生产数据的结果,list\tuple\set是保存数据的集合,是数据的结果

  --迭代器的好处:节省了内存中保存列表、元祖等容器的空间,并且在调用时完成循环的目的。

  --实现方式:

    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,使函数返回,然后交替执行任务。技术图片

迭代器和生成器

标签:容器   yield   列表   方式   依次   生成器   而不是   sel   inf   

原文地址:https://www.cnblogs.com/henji1266/p/12044597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!