• 生成器与迭代器


    一个迭代既可以被写成生成器函数,也可以写成生成器表达式,均支持自动和手动迭代。而且这些生成器只支持一个active迭代,也就是说生成器的迭代器就是生成器本身。生成器(generator)能够迭代的关键是他有next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常。

     生成器函数:既然是函数,那就是也是用def定义的,函数有了yield之后,函数名() 就变成了生成器,比如func() 是个生成器

    直接调用生成器 函数不会运行,要next()调用或者for循环调用函数才会运行

    next()调用一次仅返回一个结果(yield右边的数据),下一次调用从yield下一行开始运行,运行到返回yield右边的数据。如果是send()调用,下一次运行时,yield下面的的数据可以调用上一次yield右面运行的结果

     生成器表达式:生成器表达式来源于迭代和列表推导式的组合,但是它使用尖括号而不是方括号 ,比如:(x * 3 for in range(5))

    它返回一个对象,这个对象只有在需要的时候才产生结果。直接调用生成器不生成数据,生成一个对象,要next()或者for循环才能生成数据

    带有yield的函数不仅仅是只用于for循环,而且可用于某个函数的参数,只要这个函数的参数也允许迭代参数。(pytest里的conftest 夹具)

    生成器函数  引用地址:https://blog.csdn.net/mieleizhi0522/article/details/82142856

    生成器与迭代器区别  引用地址:https://www.cnblogs.com/wj-1314/p/8490822.html

     
     
    迭代器:

    生成器都是Iterator,但listdictstr虽然是Iterable(可迭代对象),却不是Iterator(迭代器)

    一个实现了iter()方法的对象是可迭代的

    一个实现了iter()方法和next()方法的对象就是迭代器。

    Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

     
  • 相关阅读:
    条件极值(1):隐函数极值问题
    从隐函数存在定理到隐函数定理
    吐槽教科书:不先行解释表达偏导数的符号
    8237dma的四种传送方式简介
    多线程中wait和notify的理解与使用
    ★三个和尚与机构臃肿的故事
    ★三个和尚与机构臃肿的故事
    常用的组播保留地址列表
    常用的组播保留地址列表
    谈谈IT界8大恐怖预言!
  • 原文地址:https://www.cnblogs.com/yzwdcjs/p/14470499.html
Copyright © 2020-2023  润新知