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
  • 相关阅读:
    vue2.0开发聊天程序(八) 初步完成
    王下邀月熊_Chevalier的前端每周清单系列文章索引
    将HTML页面转换为PDF文件并导出
    二维码活码管理系统
    前端眼里的docker
    这些好玩的例子,希望你也能喜欢
    如何实现swipe、tap、longTap等自定义事件
    基于 HTML5 Canvas 的交互式地铁线路图
    【php学习】时间函数
    页面瀑布流布局的实现 javascript+css
  • 原文地址:https://www.cnblogs.com/pythonclass/p/7273912.html
Copyright © 2011-2022 走看看