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:
generate
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