前面我们都是使用的内置的迭代器, 如果我们自己想实现迭代器应该怎么做?
generator
(生成器)是一个简单且强大的创建迭代器的工具.
生成器除了使用yield
之外, 就像一个正常的函数, 想在任何地方返回数据, 只需要添加yield
就可以了.
我们调用next()
函数, 一旦碰到yield
则返回yield
后的数据, python 并且可以保存当前的状态和位置, 下次再调用next()
, 则继续从此处执行.
# 生成能够迭代整数 1-n 的迭代器函数. 调用这个方法, 方法内的代码并不会立即执行, 而是返回一个生成器对象
def foo(n):
for i in range(1, n):
yield i # 每次碰到 yield, 则在此暂停, 并保存这个位置
for i in foo(20):
print(i)
当然也可以使用下面的方式去使用生成器函数
def foo(n):
for i in range(1, n):
yield i # 每次碰到 yield, 则在此暂停, 并保存这个位置
it = foo(20)
print(next(it))
print(next(it))