在Python 3(2)中,range
(xrange
)函数返回一个生成连续整数的生成器,例如
g = range(5)
print(g) # Prints range(0, 5)
t = tuple(g)
print(t) # Prints (0, 1, 2, 3, 4)
这里,tuple(g)
通过循环生成器g
并存储每个产生的数字来构造元组。我也可以从元组构造一个生成器,例如
# like this
g2 = iter(t)
t2 = tuple(g2)
# or like this
g3 = (n for n in t)
t3 = tuple(g3)
原始g
与家庭制作的g2
和g3
之间存在很大差异,如果我们尝试构建第二个元组,我们会看到它们:
tuple(g) # Works as before
tuple(g2) # Produces an empty tuple !
tuple(g3) # Produces an empty tuple !
因此,g2
和g3
(与g
不同)是"消费"在迭代。
是否有一种简单的方法来生产定制的非消耗性发电机?我的猜测是既没有生成器表达式也没有yield
可以使用的裸函数。