Python学习笔记 迭代器
iter和next:
iter方法可以生成一个迭代器,用next取得下一个元素,当next超过范围后,会出现异常
如:
>>> string = "cxy"
>>> it = iter(string)
>>> next(it)
'c'
>>> next(it)
'x'
>>> next(it)
'y'
>>> next(it)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
next(it)
StopIteration
一个不会出异常的方法:
>>> while True:
try:
each = next(it)
except StopIteration:
break
print(each)
c
x
y
>>>
一个斐波那契数列的迭代器的实现:
>>> class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
return self.a
>>> fibs = Fibs()
>>> for each in fibs:
if each < 20:
print(each)
else:
break
1
1
2
3
5
8
13
>>>
改进版,一个带迭代上限的迭代器:
>>> class Fibs:
def __init__(self, n = 10):
self.a = 0
self.b = 1
self.n = n
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > self.n:
raise StopIteration
return self.a
>>> fibs = Fibs()
>>> for each in fibs:
print(each)
1
1
2
3
5
8
使用自定义的上限
>>> fibs = Fibs(100)
>>> for each in fibs:
print(each)
1
1
2
3
5
8
13
21
34
55
89
>>>