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

    一  迭代器

    1、什么是迭代

     指的是一个重复的过程,每一次重复成为一次迭代,并且每一次重复的结果是下一次重复的初始值

    2、为什么要有迭代器

    对于序列类型:str,list,tuple,可以依赖索引来迭代取值,但是对于dict,set,文件,python文件必须为我们提供一种不依赖索引的取值方式--》迭代器

    3、可迭代对象

      有这个方法obj.__iter__的都是可迭代对象,上面提到的都可迭代对象

    4、迭代器对象:

    既有obj.__iter__,obj__next__方法的是迭代器对象,上面提到的只有文件是迭代器对象

    5、总结:

    1)可迭代对象不一定是迭代器对象

    2)迭代器对象一定是可迭代对象

    3)调用obj__iter__()方法,得到的是迭代器对象(对于迭代器对象执行__iter__得到的仍然是迭代器对象)

    字典可转换成迭代器对象,不依赖索引取出key

     

    上图等同于下图

    注意:迭代器d_iter没有值了,就会抛出异常StopIteration

     6、for循环详解

     

    原理:

    1)调用in后的obj__iter_()

    2)k=obj_iter_.next_()

    3)捕捉StopIteration 异常,结束迭代

    7、迭代器的优缺点:

    优点:

    1)提供一种统一的、不依赖于索引的取值方式,为for循环的实现提供了依据

    2)迭代器同一时间在内存中只有一个值--》更节省内存

    缺点:

    1)只能往后取值,并且是一次性的

    2)不能统计值的个数,即长度

     二 生成器

    1、什么是生成器?

    只要在函数内被出现yield关键字,那么在执行函数就不会执行函数体代码,会得到一个结果,该结果就是生成器

    生成器就是迭代器

    2、yield的功能:

    1)yield为我们提供了一种自定义迭代器对象的方法

    2)   yield与retur的区别:

    ① yield 可以返回多次值

    ② 函数暂停与再继续的状态是有yeild帮我们保存的

    小练习:

  • 相关阅读:
    支付宝支付-扫码支付
    安装agent
    设置微服务环境变量脚本
    曹工说Spring Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的
    matlab文件拷贝
    hive优化之调整mapreduce数目
    软件测试面试题
    wtforms第三方校验库
    flask貌似可以学习和参考的网站
    flask 接受(获取)url 请求的参数 的方法 和 表单 post过来的数据
  • 原文地址:https://www.cnblogs.com/yuguangwei/p/8202384.html
Copyright © 2011-2022 走看看