zoukankan      html  css  js  c++  java
  • 迭代器和生成器

    迭代器:
     双下方法 : 很少直接调用的方法。一般情况下,是通过其他语法触发的
     可迭代的 —— 可迭代协议 含有__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)
     num = 0
     for i in g:
         num += 1
         if num > 50:
             break
         print(i)

     从生成器中取值的几个方法
         next
        for
         数据类型的强制转换 : 占用内存

    作者:间歇性-精神病 出处:https://www.cnblogs.com/Intermittent-psychosis/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接 Github:https://github.com/don15278/python.git
  • 相关阅读:
    过往总结
    查找光标处的标识符
    【转】Linux 内核开发 Eclipse内核开发环境搭建
    【转】Writing linux kernel code in Eclipse
    【转】 Linux内核升级指南
    [转]Ubuntu 11.04 安装后要做的20件事情
    【转】vim 替换操作大全
    【转】移动硬盘安装ubuntu
    重置 Winsock 目录
    【转】让Firefox像vim一样操作
  • 原文地址:https://www.cnblogs.com/Intermittent-psychosis/p/10590793.html
Copyright © 2011-2022 走看看