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

发布时间 2023-08-23 11:04:21作者: 一杯清酒邀明月

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

对一个容器对象调用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