zoukankan      html  css  js  c++  java
  • Python_迭代器和生成器的复习_38

     迭代器和生成器

    迭代器:

    双下方法:很少直接调用的方法,一般情况下,是通过其他方法触发的

    可迭代的协议——可迭代协议 含有__iter__ 的方法 ('__iter__' in dir(数据))

    可迭代的一定可以被for循环

    迭代器协议:含有 __iter__ 和 __next__ 方法

    迭代器一定可以迭代, 可迭代的通过调用 __iter__() 方法就能得到一个迭代器

    迭代器的特点:

      很方便的使用,一个迭代器只能从前往后,取一次

      节省内存空间

      

    生成器:

    生成器的本质就是迭代器

    生成器的表现形式

      生成器函数

      生成器表达式

    生成器函数:

      含有yield关键字的函数就是生成器

      特点:

        调用函数之后函数不执行,返回一个生成器

        每次调用next方法的时候回取到一个值

        直到取完最后一个,再执行next的话就会报错

    写生成器实现:有一个文件,从文件里分段读取内容

    readline

    read(10)

    在读出来的内容前面加上一个  '***',再返回给调用者

    def generator():
        for i in range(20):
            yield '哇哈哈%s'%i
    
    g = generator()  #调用生成器函数得到一个生成器
    print(list(g))   #数据类型的强制装换 生成器转化为列表
    #ret = g.__next__() #每一次执行g.__next__就是从生成器中取值,预示着生成器函数中的代码继续执行 #print(ret) g1 = generator() num = 0 for i in g1: num += 1 if num > 50: break print(i) # 从生成器中取值的几个方法 # next # for # 数据类型的强制转换 : 占用内存
    # 从生成器中取值的几个方法
    # next
    # for
    # 数据类型的强制转换 : 占用内存

      

  • 相关阅读:
    立一个flag。
    详解 fcntl 记录上锁。
    [转] 虚拟机中生成与物理机的共享文档。
    Shell实现1.0
    深剖malloc、new
    由命名管道的实现联想到 read 和 fread 的区别。
    僵尸进程与孤儿进程。
    Vim引申以及Linux下彩色进度条实现
    各大排序八方齐聚!
    Docker三剑客:Compose、Machine和Swarm
  • 原文地址:https://www.cnblogs.com/LXL616/p/10676928.html
Copyright © 2011-2022 走看看