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

    迭代:
    # 1 重复
    # 2 下一次重复是基于上一次的结果
    python为了提供一种不依赖于索引的迭代方式,
    python会为一些对象内置__iter__方法
    obj.__iter__称为可迭代的对象
    obj.__iter__() 或者iter(obj)得到的结果就是迭代器

    #得到的迭代器:既有__iter__又有一个__next__方法
    next(obj)或者obj.__iter__()调用
    #迭代器的优点
    #1:提供了一种不依赖于索引的取值方式
    #2:惰性计算。节省内存

    #迭代器的缺点:
    #1:取值不如按照索引取值方便
    #2:一次性的。只能往后走不能往前退
    #3:无法获取长度

    迭代器的应用:
    1。提供了一种不依赖索引的统一的迭代方法
    2. 惰性计算,比如取文件的每一行

    生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器
    生成器本质是将函数变为可迭代的迭代器

    yield的功能:
    1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
    2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
    3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
    求平均数的生成器
    def aveage():
        total = 0
        day = 0
        ave = 0
        while 1:
            ave_num = yield ave
            total+=ave_num
            day+=1
            ave = total/day
    
    g = aveage()
    next(g)
    print(g.send(30))
    print(g.send(40))
    print(g.send(20))
    print(g.send(30))
    View Code

    导入模块测试迭代器

    from collections import Iterable
    from collections import Iterator
    View Code
    l = [1,2,5,5,4,513,435,4]
    print(isinstance(l,Iterator))
    print(isinstance(l,Iterable))
    View Code
  • 相关阅读:
    nginx+redis 实现 jsp页面缓存,提升系统吞吐率
    mybatis做like模糊查询
    java自定义注解实现前后台参数校验
    sql like 通配符 模糊查询技巧及特殊字符
    Hbuilder 常用快捷键汇总
    史上最全最强SpringMVC详细示例实战教程
    软件设计师&产品经理应常去的网站
    ActionMQ5.8.0 JMS实例 手把手详细图解
    Maven简单使用
    Maven 使用介绍
  • 原文地址:https://www.cnblogs.com/pythonclass/p/7273912.html
Copyright © 2011-2022 走看看