比方說,我有發電機功能是這樣的:Python函數可以使用生成器並將生成器返回到其生成的輸出的子集?
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)
實施例輸出可能是: ( '一個',1),( '一個',2),( 'A',3),( (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()或打印機(),並避免在存儲器中存儲整個組在一旦? (在現實生活中,這些羣體是巨大的)
在現實生活中,可以多次行走大型發電機嗎?或者數據是否以某種不可挽回的方式消耗?如果我正確理解你的例子,那麼調用random()的狀態不會被存儲在任何有用的地方,所以你不能再次使用該生成器。 – Nelson 2009-08-01 00:43:55