转自本人旧博客
title: 生成器-Generators
date: 2017-07-21 15:11:24
tags: python
categories: python
Generators(生成器)
- 一种迭代器,但是只能对其迭代一次。
- 因为它们并没有把所有的值存在内存中,而是在运行是生成值.
- 通过遍历来使用
- “for”循环
- 传递转给任意可以进行迭代的函数和结构。(大多是以函数来实现)
- 不返回一个值,而是yield一个值。
- 生成器占很少的资源
- eg:计算斐波那契数列的生成器:
-
这种方式我们不用担心它会使用大量资源
-
这种方法也许会在计算很大的输入参数时,用尽所有的资源。
-
next()
-
允许获取序列的下一个元素
-
在yield所有值后,next()触发了StopIteration的异常。但是在for循环时没有这个异常,因为for循环会自动捕捉到这个异常并停止调用next()
-
python内置数据类型也支持迭代的
- str对象不是一个迭代器,它是一个可迭代对象。支持迭代,但不能直接对其进行迭代操作
- 对其实施迭代:使用iter,它将根据一个可迭代对象返回一个迭代器对象