生成器的简要概述
在上一篇随笔中我们简单了解了一下迭代器,不过在python中,创建迭代器最好的技术就是使用生成器。生成器的语法实现类似于函数,但不返回值。为了显示序列中的每一个元素,会使用yield
语句。比如我们来实现一下range
的方法:
def range(start = 0,stop = None,step = 1):
if stop is None : #判断输入了几个值
start , stop = 0 , start
if step > 0: #判断stepd的符号
while start < stop:
yield start
start += step
elif step < 0:
while start > stop:
yield start
start += step
注意:我们使用关键字yield
而不是return
来表示结果,表明我们正在python中定义一个生成器,而不是传统函数。在同一实现中,将yield
和return
结合起来是非法的!return
会导致生成器终止执行。
在每次循环迭代中,python会执行生成器代码一个yield
语句指出下一个值为止。在这一点上,该程序是暂时中断的,只有当另一个值被请求时才恢复。当控制流自然到达程序的末尾时(或碰到一个return
)会自动抛出StopIteration
异常。