【发布时间】:2009-08-01 00:24:45
【问题描述】:
假设我有一个像这样的生成器函数:
import random
def big_gen():
i = 0
group = 'a'
while group != 'd':
i += 1
yield (group, i)
if random.random() < 0.20:
group = chr(ord(group) + 1)
示例输出可能是: ('a', 1), ('a', 2), ('a', 3), ('a', 4), ('a', 5), ('a', 6), (' a', 7), ('a', 8), ('b', 9), ('c', 10), ('c', 11), ('c', 12), ('c' , 13)
我想将其分为三组:A 组、B 组和 C 组。我希望每个组都有一个生成器。然后我将生成器和组字母传递给子函数。子函数的一个例子:
def printer(group_letter, generator):
print "These numbers are in group %s:" % group_letter
for num in generator:
print "\t%s" % num
期望的输出是:
These numbers are in group a:
1
2
3
4
5
6
7
8
These numbers are in group b:
9
These numbers are in group c:
10
11
12
13
如何在不更改 big_gen() 或 printer() 的情况下做到这一点,并避免一次将整个组存储在内存中? (在现实生活中,这些群体庞大)
【问题讨论】:
-
现实生活中,大发电机多走几趟行不行?或者数据是否以某种不可撤销的方式被消耗?如果我正确理解了您的示例,则调用 random() 的状态不会存储在任何有用的地方,因此您无法再次使用该生成器。