Несколько раз я думал, что стиль генератора может быть более прямым, возвращая список, например
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)