self.prev = 0
self.curr = 1
def __iter__(self):
returnself
def __next__(self):
value = self.curr
self.curr += self.prev
self.prev = value
returnvalue
>>> f = Fib()
>>> list(islice(f, 0, 10))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
迭代器就像一个懒加载的工厂,比及有人须要的时刻才给它生成值返回,没调用的时刻就处于休眠状况等待下一次调用。
生成器(generator)def something():
result = []
for...in...:
result.append(x)
returnresult
生成器算得上是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,当然它可以用更少的代率攀来实现类似的功能。如今就可以着手重构你的代码了,但凡看到类似:def iter_something():
for...in...:
推荐阅读
留意事项2)语法缩进,应用四个空格;多加注释解释。3)定名建议规矩:变量名大年夜写、局部变量小写,函数名小写,名字表现出实际感化。4)默认变量是全局的,在函数中变量local指定为局部变>>>详细阅读
地址:http://www.17bianji.com/lsqh/35917.html