Python基础入门学习笔记 048 魔法方法:迭代器


迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。提供迭代方法的容器称为迭代器(如序列(列表、元组、字符串)、字典等)。

对一个容器对象调用iter()就得到它的迭代器,调用next()迭代器就会返回下一个值。入托迭代器没有值可以返回了,就会抛出异常。

?iter()

–__iter__()

?next()

–__next__()

实例1:

1 >>> string = "FishC" 2 >>> it = iter(string) 3 >>> next(it) 4 'F' 5 >>> next(it) 6 'i' 7 >>> next(it) 8 's' 9 >>> next(it) 10 'h' 11 >>> next(it) 12 'C' 13 >>> next(it) 14 Traceback (most recent call last): 15 File "<pyshell#8>", line 1, in <module> 16 next(it) 17 StopIteration

一个容器如果是迭代器,那就必须实现__iter__()魔法方法,这个方法实际上就是返回迭代器本身。重点要实现的是__next__()魔法方法,因为它决定了迭代的规则。

实例2:

1 >>> class Fibs: 2 def __init__(self): 3 self.a = 0 4 self.b = 1 5 def __iter__(self): 6 return self 7 def __next__(self): 8 self.a,self.b = self.b,self.a + self.b 9 return self.a 10 11 12 >>> fibs = Fibs() 13 >>> for each in fibs: 14 if each < 20: 15 print(each) 16 else: 17 break

1
1
2
3
5
8
13

实例3:

1 >>> class Fibs: 2 def __init__(self,n =20): 3 self.a = 0 4 self.b = 1 5 self.n = n 6 def __iter__(self): 7 return self 8 9 def __next__(self): 10 self.a,self.b = self.b,self.a + self.b 11 if self.a > self.n: 12 raise StopIteration 13 return self.a 14 15 16 >>> fibs = Fibs() 17 >>> for each in fibs: 18 print(each)

1
1
2
3
5
8
13

1 >>> fibs = Fibs(10) 2 >>> for each in fibs: 3 print(each)

1
1
2
3
5
8



上一篇:Python基础入门学习笔记 047 魔法方法:定制序列

下一篇:Python基础入门学习笔记 049 乱入:生成器


Python
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图