迭代器就像一个懒加载的工厂,比及有人须要的时刻才给它生成值返回,没调用的时刻就处于休眠状况等待下一次调用。
生成器(generator)
- def something():
- result = []
- for ... in ...:
- result.append(x)
- return result
生成器算得上是Python说话中最吸惹人的特点之一,生成器其实是一种特别的迭代器,不过这种迭代器加倍优雅。它不须要再像膳绫擎的类一样写__iter__()和__next__()办法了,只须要一个yiled关键字。 生成器必定是迭代器(反之不成立),是以任何生成器也是以一种懒加载的模式生成值。用生成器来实现斐波那契数列的例子是:
- def fib():
- prev, curr = 0, 1
- while True:
- yield curr
- prev, curr = curr, curr + prev
- >>> f = fib()
- >>> list(islice(f, 0, 10))
- [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
fib就是一个通俗的python函数,它特别的处地点于函数体中没有return关键字,函数的返回值是一个生成器对象。当履行f=fib()返回的是一个生成器对象,此时函数体中的代码并不会履行,只有显示或隐示地调用next的时刻才会真正履行琅绫擎的代码。
生成器在Python中是一个异常强大年夜的编程构造,可以用更少地中心变量写流式代码,此外,比拟其它容器对象它更能节俭内存和CPU,当然它可以用更少的代率攀来实现类似的功能。如今就可以着手重构你的代码了,但凡看到类似: