docs.python.org/3/reference/...
я есть функция генератораgenerate
который дает 5 случайных чисел по одному. Мне нужно иметь возможность генерировать числа двумя способами:
generate
функцияМногократное поколение, что означает многократное выполнениеgenerate
и получая все результаты вместе как единый (объединенный) потокДля этого я написал еще одну функциюget_resource
, который вызываетgenerate
либо один раз, либо используяitertools.chain
запускать генераторы один за другим, но прозрачно для вызывающей стороны.
Моя цель - использоватьget_resource
функционировать и производить результаты в том же формате (один список чисел), независимо от одного / нескольких поколений.
import itertools
import random
def get_resource(values=None):
def resource_generator():
if values:
# run a generator for every value
return itertools.chain(generate(value) for value in values)
else:
return generate('meh')
return resource_generator()
def generate(value):
for _ in range(5):
yield random.randint(1, 101)
if __name__ == '__main__':
# list() is used for convenience only,
# I still need the values one by one
print list(get_resource())
print list(get_resource([1, 2, 3]))
Это печатает:
[63, 22, 87, 2, 54]
[<generator object generate at 0x1089f7640>, <generator object generate at 0x1089f7690>, <generator object generate at 0x1089f76e0>]
Пока мне это нужно для печати:
[63, 22, 87, 2, 54]
[63, 22, 87, 2, 54, 1, 58, 79, 89, 77, 94, 99, 30, 30, 4]
Я использую python2.7