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

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

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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
  • 2021-08-11
  • 2021-11-17
猜你喜欢
  • 2022-01-04
  • 2022-12-23
  • 2021-09-14
  • 2022-02-24
  • 2021-12-07
  • 2021-06-30
  • 2022-12-23
相关资源
相似解决方案