iter、next
首先最主要的有两个方法,生成迭代器iter(),执行迭代next()。iter生成迭代器会记下每次执行后的位置,而next会根据此位置继续执行
凡是可迭代对象,如字典、列表、元组、字符串···都可以使用iter来生成迭代器,其返回类型为iteration。其中,若对字典进行iter,则会将其键生成迭代器,如下:
In [16]: dic={'a':1,'b':2,'c':3}
In [17]: A=iter(dic)
In [18]: type(A)
Out[18]: dict_keyiterator
In [19]: next(A)
Out[19]: 'a'
In [21]: next(A)
Out[21]: 'b'
In [22]: next(A)
Out[22]: 'c'
也可以用循环体对迭代对象进行输出
In [24]: dic={'a':1,'b':2,'c':3}
In [25]: B=iter(dic)
In [26]: for i in B:
...: print(i)
...:
a
b
c
迭代器生成式
In [27]: C=(i for i in [1,2,3,4,5,6])
In [28]: type(C)
Out[28]: generator
In [29]: next(C)
Out[29]: 1
In [30]: next(C)
Out[30]: 2
类似列表生成式,只需将[]换为()即可
魔术方法及stopinteration
为了防止迭代对象一直进行迭代,可以使用stopinteration来终止迭代
class Interation():
def __iter__(self):
self.a=0
return self
def __next__(self):
if self.a<5:
self.a+=1
return self.a
else:
raise StopIteration
A=Interation()
print(A)
B=iter(A)
print(B)
while True:
print(next(B))
<__main__.Interation object at 0x0000020953D2C910>
<__main__.Interation object at 0x0000020953D2C910>
1
2
3
4
5
yeild
在函数中,将return修改为yeild,也可生成一个迭代对象