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

Ответы на вопрос(2)

Ваш ответ на вопрос