Получить ввод функции высшего порядка в 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'))
Другие вопросы по тегам