有好几次我认为生成器的方式比返回列表更加直接,例如:
def foo(input_array):
for x in input_array:
yield processed(x)
vs.
def bar(input_array):
accumulator = []
for x in input_array:
accumulator.append(processed(x))
return accumulator
(好吧,如果真的那么简单,我会写map
,但你懂我的意思:生成器版本更简洁)。然而,返回生成器类型并不总是理想的。有没有内置的装饰器可以用来将foo
改成返回列表或元组的函数?我自己写的方式是,
import functools
def transform_return_value(transformer):
def inner(f):
@functools.wraps(f)
def new_f(*argv, **kwargs):
return transformer(f(*argv, **kwargs))
return new_f
return inner
@transform_return_value(list)
def foo(input_array):
for x in input_array:
yield processed(x)
list(generator_function())
呢,或者一开始就写一个list_function()
函数呢? - mgilsonlist(…)
)...而不是回答OP的实际问题:“Python中是否有将生成器函数转换为返回列表的函数的库函数?” - David Wolever