生成器1

生成器是一种特殊的迭代器。

用生成器实现斐波那契数列:

from collections import Iterator, Iterable


def create_nums(num):
    a, b = 1, 1
    cnt = 0

    while cnt < num:
        yield a
        a, b = b, a + b
        cnt += 1


nums_generator = create_nums(10)

ret = iter(nums_generator)
print(ret)  # <generator object create_nums at 0x00000000006ACD00>
print(next(ret))  # 1
print(isinstance(nums_generator, Iterable))  # True
print(isinstance(nums_generator, Iterator))  # True

for i in range(15):
    next(nums_generator)  # 抛出异常StopIteration

可以看到对一个生成器调用iter方法,返回一个生成器对象ret(即可迭代对象),对ret调用next返回一个生成的值1,这两个步骤说明了生成器符合迭代器的特性(即对可迭代对象调用iter()返回一个迭代器,对迭代器调用next返回一个迭代出来的值)

迭代器是一个类中实现了__iter__和__next__方法,生成器没有明显实现这两个方法,但是具有这两种方法的逻辑,所以说它既是迭代器,又有特殊性。

 

posted @ 2020-03-31 10:45  olivertian  阅读(106)  评论(0编辑  收藏  举报