Python - 迭代器和生成器区别(Iterator vs Generator)
Contents
下面简单说一下迭代器和生成器的区别:
通常生成器是通过调用一个或多个yield
表达式构成的函数。每个生成器都是迭代器。
而迭代器是一个抽象的概念,包括了iterable
和iterator
这两种实现。
Iterator & Generator
iterable
: 它表示了一个可以重复迭代的对象,判断一个对象是否可以iterable
, 是否可以for
循环, 是否定义了__getitem__
方法, 是否定义了__iter__
方法返回一个iterator
iterator
: 特殊之处是只能迭代一次,判断一个对象是否是iterator
,是否定义了__iter__
方法,并且必须返回自身,是否定义了__next__
方法
PS. str
和list
都是典型的iterable
而不是iterator
用一个公交车的例子再来看一遍:
1 | class Bus(object): # 只是iterable而不是iterator |
generator
: 看如下表达式,两者是等价的。
1 | def squares(length): |
用yield
实现斐波那契数列:
1 | def fibonacci(): |
Author: itabas016
Link: https://tech.itabas.com/2017/09/17/python/iterator-difference-with-generator/
License: CC BY-NC-ND 4.0