У меня есть множество функций многократного использования, все с одной и той же сигнатурой (они принимают record
и возвращают float
).Мне часто нужно объединить функции в новую функцию.
Допустим, я хочу создать функцию, которая принимает record
, применяет к ней f
и, если результат отрицательный, преобразует ее в ноль.У меня есть два способа сделать это: изменение состава и функции.Каковы плюсы и минусы каждого подхода?
Состав:
def non_negative(value):
return max(0, value)
g = compose(non_negative, f)
# from functional module by Collin Winter
def compose(func_1, func_2, unpack=False):
"""
compose(func_1, func_2, unpack=False) -> function
The function returned by compose is a composition of func_1 and func_2.
That is, compose(func_1, func_2)(5) == func_1(func_2(5))
"""
if not callable(func_1):
raise TypeError("First argument to compose must be callable")
if not callable(func_2):
raise TypeError("Second argument to compose must be callable")
if unpack:
def composition(*args, **kwargs):
return func_1(*func_2(*args, **kwargs))
else:
def composition(*args, **kwargs):
return func_1(func_2(*args, **kwargs))
return composition
Модификация:
def non_negative(func):
def new_func(record):
return max(0, func(record))
return new_func
g = non_negative(f)