Crie um gerador que produz valores de qualquer número de geradores internos

Eu tenho uma função de geradorgenerate que produz 5 números aleatórios, um de cada vez. Eu preciso ser capaz de gerar os números de duas maneiras:

Geração única, o que significa uma única saída degenerate funçãoGeração múltipla, o que significa execução múltipla degenerate e produzindo todos os resultados juntos como um único fluxo (mesclado)

Para isso eu escrevi outra funçãoget_resource, que chamagenerate uma vez ou usandoitertools.chain para executar os geradores um após o outro, mas de forma transparente para o chamador.

Meu objetivo é usarget_resource funcionar e produzir os resultados no mesmo formato (uma lista de números), independentemente de gerações únicas / múltiplas.

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]))

Imprime:

[63, 22, 87, 2, 54]
[<generator object generate at 0x1089f7640>, <generator object generate at 0x1089f7690>, <generator object generate at 0x1089f76e0>]

Embora eu precise imprimir:

[63, 22, 87, 2, 54]
[63, 22, 87, 2, 54, 1, 58, 79, 89, 77, 94, 99, 30, 30, 4]

Eu uso python2.7

questionAnswers(2)

yourAnswerToTheQuestion