生成器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__方法,生成器没有明显实现这两个方法,但是具有这两种方法的逻辑,所以说它既是迭代器,又有特殊性。