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
  • 相关阅读:
    CentOS7配置本地yum源和在线yum源
    Centos7中安装samba服务器
    phpmydmain登录问题
    java实现简单的加法器
    我的偶像 凯文 米特尼克 简介
    安全好的地方分享
    a标签
    Vmware虚拟机 的工作模式
    java面板
    java的套接字实现远程连接
  • 原文地址:https://www.cnblogs.com/pythonclass/p/7273912.html
Copyright © 2011-2022 走看看