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

    迭代器

    可迭代对象

    • 集合类数据类型如list、tuple、dict、set、str等
    • 生成器

    判断是否可迭代

    isinstance([],Iterable)
    或查看其是否有__iter__()

    迭代器

    isinstance([],Iterator)
    或查看其是否有__next__()

    迭代器的优缺点:

    迭代器的优点
      1. 提供了一种不依赖于索引的取值方式
      2. 惰性计算。节省内存

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

    生成器

    生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器。

    yield的功能:

    1. 与return类似,都可以返回值,但不一样的地方在于可以有多个yield,每个yield能够返回一次值,而return只能返回一次值就结束了
    2. 为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
    3. 遵循迭代器的取值方式obj.next(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的

    生成器的使用

    def foo(n):
        while n>0:
            yield n
            n_=1
    g=foo()
    
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    

    生成器表达式形式

    def foo():
        print('starting')
        while True:
            x=yield 
            print('value',x)
    g=foo()
    print(g.__next__())
    print(g.send(1))
    
  • 相关阅读:
    【2019/5/24】周进度报告
    第一阶段意见汇总以及改进
    【2019/5/18】周进度报告
    用户体验评价-搜狗输入法
    第二阶段冲刺1
    第十四周总结
    找水王
    第十三周总结
    程序员修炼之道-从小工到专家阅读笔记02
    第十二周总结
  • 原文地址:https://www.cnblogs.com/chenrenjian/p/7050417.html
Copyright © 2011-2022 走看看