我有一个生成器函数
我的目标是使用
它打印出来的是:
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]
我使用Python 2.7版本。
resource_generator()
而不是直接将其代码放在get_resource()
中? - khelwood