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))
    
  • 相关阅读:
    P2610 [ZJOI2012]旅游
    P2323 [HNOI2006]公路修建问题
    P3629 [APIO2010]巡逻
    ARC059F
    AGC004D Teleporter
    p3203 弹飞绵羊
    bzoj5450 轰炸
    bzoj4313 三维积木
    cf123E Maze
    bzoj4423 [AMPPZ2013]Bytehattan
  • 原文地址:https://www.cnblogs.com/chenrenjian/p/7050417.html
Copyright © 2011-2022 走看看