Получить ввод функции высшего порядка в Python
Допустим, у меня есть HOF
def some_func(lst):
def func(args):
if args[0]=='compute':
return sum(lst)
elif args[0]=='add':
XXXXX #Return a new HOF with the 2 sub HOF input parameters added together.
return func
x1=some_func([1,2,3])
x2=some_func([2,3,4])
Одним из входных * аргументов для HOF является ('add', another_hof)
, которые требуют, чтобы HOF добавил другой параметр HOF и возвратил HOF с добавленным параметром.
пример:
x3=x1('add',x2)
x4=some_func([3,5,7])
Затем,
x3 should equal x4.
test_case:
x1=some_func([1,2,3])
x2=some_func([2,3,4])
x1('compute')=6
x2('compute')=9
x3=x1('add',x2)
x3('compute')=15
Когда я выполняю x HOF ('add,x2) для функции x1, можно ли мне узнать входной параметр x2' [2,3,4] внутри функции func(*args)?
1 ответ
Решение
На мой взгляд, суть проблемы заключается в следующем: func
Например, вам нужно получить lst
значение, которое оно содержит.
Один из способов сделать это - добавить другой режим в ваш условный блок, который возвращает lst
, Давайте назовем это get_lst
:
def some_func(lst):
def func(*args):
if args[0]=='compute':
return sum(lst)
elif args[0]=='add':
new_lst = [a+b for a,b in zip(lst, args[1]("get_lst"))]
return some_func(new_lst)
elif args[0] == "get_lst":
return lst
return func
x1=some_func([1,2,3])
x2=some_func([2,3,4])
print(x1('compute'))
print(x2('compute'))
x3=x1('add',x2)
print(x3('compute'))
Результат:
6
9
15
Вы также можете назначить lst
к атрибуту объекта функции:
def some_func(lst):
def func(*args):
if args[0]=='compute':
return sum(lst)
elif args[0]=='add':
new_lst = [a+b for a,b in zip(lst, args[1].params)]
return some_func(new_lst)
func.params = lst
return func
x1=some_func([1,2,3])
x2=some_func([2,3,4])
print(x1('compute'))
print(x2('compute'))
x3=x1('add',x2)
print(x3('compute'))