很多时候我认为生成器样式可以比返回列表更直接,例如,
def foo(input_array):
for x in input_array:
yield processed(x)
对比
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)