完全理解python迭代对象_完全理解Python迭代对象、迭代器、生成器

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值