手动迭代
对于迭代器和迭代对象,可以使用迭代工具,比如for循环,也可以自己手动迭代
手动迭代需要自己处理StopIteration异常
迭代器手动迭代
因为迭代器内置了__next__方法,调用next()就会自动调用__next__方法
(1)文件是一个迭代器
f=open("text.text")
try:
while True:
line=next(f)
print(line,end='')
except StopIteration:
pass
finally:
f.close()
(2)列表是一个可迭代对象,需要先调用iter函数生成一个迭代器
L=[1,2]
l=iter(L)
print(next(l))
print(next(l))
print(next(l))
运行结果:
1
2
Traceback (most recent call last):
File "/Users/jingsli/PycharmProjects/mocklearn/gernatorlearn/demo6.py", line 8, in <module>
print(next(l))
StopIteration
生成器
函数中只要出现了yield语句,就会将其转变成一个生成器,生成器只会在next调用时才会运行
def countdown(n):
print("Starting to count from ",n)
while n>0:
yield n
n