1迭代器有哪些:for循环,字典等
cats = {'猫妈妈的第一胎':'生了五只小猫',\
'猫妈妈的第二胎':'生了四只小猫',\
'猫妈妈的第三胎':'生了三只小猫咪~'}
>>> for each in cats:
print("%s->%s"%(each,cats[each]))
猫妈妈的第一胎->生了五只小猫
猫妈妈的第二胎->生了四只小猫
猫妈妈的第三胎->生了三只小猫咪~
2.所用方法:
iter() :迭代器
next():返回下一个值
list = ['猫妈妈','花臂','小黄','橘橘']
>>> it = iter(list)
>>> next(it)
'猫妈妈'
>>> next(it)
'花臂'
>>> next(it)
'小黄'
>>> next(it)
'橘橘'
>>> next(it)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
next(it)
StopIteration
it就是一个迭代器,调用next方法来返回值,一直到迭代器中没有值可以返回。
还可以用异常捕获的方法:
while 1:
try:
each = next(it)
except StopIteration:
break
print(each)
猫妈妈
花臂
小黄
橘橘
p.s以上用的try…except+错误名的结构
3.类里面的迭代方法:
__iter__()
__next__()
以下用迭代器写一个斐波那契数列:
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 < 48:
print(each)
else:
break
1
1
2
3
5
8
13
21
34
或者是:
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
self.n = 20
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
13
P.S.raise的作用:触发报错