次のようなジェネレーター関数があるとします。
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 の 3 つのグループに分けたいと思います。そして、グループごとにジェネレーターが必要です。次に、ジェネレータとグループ文字をサブ関数に渡します。サブ機能の例:
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() を変更せずにこれを行うにはどうすればよいですか? また、グループ全体を一度にメモリに格納しないようにするにはどうすればよいですか? (実生活では、グループは巨大です)