Python3 的生成器

使用 yield 语句构造的 Generator 可以被迭代:

def reverse(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]

Generator 执行到 yield 语句时会暂停,直到遇到迭代时继续执行到下一个 yield 语句处暂停:

>>> for char in reverse('golf'):
...     print(char)
...
f
l
o
g

Python3 的内置函数 range()、zip() 是生成器:

>>> sum(i*i for i in range(10))                 # sum of squares
285

>>> xvec = [10, 20, 30]
>>> yvec = [7, 5, 3]
>>> sum(x*y for x,y in zip(xvec, yvec))         # dot product
260