迭代器
使用for循环按照一定格式打印出内容:
links = {"1":"diyige", "2":"dierge", "3":"disange"}
for i in links :
print("%s - > %s" % (i, links[i]))
打印出来的结果为:
1 - > diyige
2 - > dierge
3 - > disange
第一次看到这个,按照我的分析 打印内容中,第一个百分号加s,打印的是键值,第二个打印出来的是value值,原本以为是样板格式,更换内容(把s换成其他的也行)试了一下竟然报错了,看来应该是固定的格式
使用iter()生成迭代器,用next方法记录当前的元素,如下,即可每次打印出来一个元素
links = "wozhengzia"
it = iter(links)
print(next(it))
print(next(it))
print(next(it))
如果到结尾了,迭代器已经没有剩余元素可以打印了,那么就会抛出StopIteration的异常
使用while循环,添加异常打印,还原for循环达到相同的效果:
links = "wozhengzia"
it = iter(links)
while True :
try:
each = next(it)
except StopIteration:
break
print(each)
for each in links:
print(each)
下面是用类来实现斐波那契额数组的输出,我还没看到那边,先敲出来再说,类与方法间,要用两个空行分割:
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
fib = Fibs()
for each in fib:
if each <20:
print(each)
else:
break
稍微改造一下,添加一个限定,就好了:
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)