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
  • 相关阅读:
    css3条件判断_@supports的用法 以及 Window.CSS.supports()的使用
    UI自动化测试框架 ---TestCafe
    JavaScript的bind方法
    还在拼字符串?试试HTML5的template标签
    讲C#泛型规则最好的一篇文章
    不一样的go语言-不同的语法之type
    不一样的go语言-不同的OO
    不一样的go语言-一样的语法
    不一样的go语言之入门篇-Hello World
    不一样的go语言创世
  • 原文地址:https://www.cnblogs.com/pythonclass/p/7273912.html
Copyright © 2011-2022 走看看