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
原文地址:https://www.cnblogs.com/fansik/p/7679999.html