Python基础-生成器和迭代器
生成器都是迭代器,迭代器不一定是生成器
def fansik(max):
n, before, after = 0, 0, 1
while n < max:
print(before)
before, after = after, before + after
n += 1
fansik(10)
生成器方式
def fansik(max):
n, before, after = 0, 0, 1
while n < max:
yield before
before, after = after, after + before
n += 1
a = fansik(8)
for i in a:
print(i)
迭代器
满足两个条件:
1、有iter方法
2、有next方法
for 循环内部三件事:
1、调用可迭代对象的iter方法返回一个迭代器对象
2、不断调用迭代器对象的next方法
3、处理StopIteration
小结:
凡是可用作for循环的对象都是Iterable类型;
凡是可用作于next()函数的对象都是Iterator类型,他们表示一个惰性计算的序列;
集合数据类型list、dic、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象
参考文章:http://www.cnblogs.com/yuanchenqi/articles/5769491.html