python之 生成器-Generators

转自本人旧博客


title: 生成器-Generators
date: 2017-07-21 15:11:24
tags: python
categories: python


Generators(生成器)

  • 一种迭代器,但是只能对其迭代一次。
    • 因为它们并没有把所有的值存在内存中,而是在运行是生成值.
  • 通过遍历来使用
    • “for”循环
    • 传递转给任意可以进行迭代的函数和结构。(大多是以函数来实现)
  • 不返回一个值,而是yield一个值。

python之 生成器-Generators_第1张图片

  • 生成器占很少的资源
  • eg:计算斐波那契数列的生成器:
    • 这种方式我们不用担心它会使用大量资源
      python之 生成器-Generators_第2张图片

    • 这种方法也许会在计算很大的输入参数时,用尽所有的资源。
      python之 生成器-Generators_第3张图片

next()

  • 允许获取序列的下一个元素
    python之 生成器-Generators_第4张图片

  • 在yield所有值后,next()触发了StopIteration的异常。但是在for循环时没有这个异常,因为for循环会自动捕捉到这个异常并停止调用next()

  • python内置数据类型也支持迭代的
    python之 生成器-Generators_第5张图片

    • str对象不是一个迭代器,它是一个可迭代对象。支持迭代,但不能直接对其进行迭代操作
    • 对其实施迭代:使用iter,它将根据一个可迭代对象返回一个迭代器对象
      python之 生成器-Generators_第6张图片

你可能感兴趣的:(python)