#python #function #arguments
Вопрос:
у меня проблема:
Мне нужно реализовать функцию в python, которая выводит скалярное число, кратное аргументу — аргумент-это сама функция, имеющая подпись:
def innerF(a,b): return x
Скалярный множитель является константой внутри функции — например,
return 55 * x
Теперь наступает та часть, которую я, кажется, не понимаю: вызов Sytanx должен быть:
print( outerF(innerF)(a,b))
Итак, вкратце
def innerF(a,b): return a b def outerF( #What goes here? ): return 55* #How two call the innerF? print(outerF(innerF)(a,b))
Что я знаю до сих пор:
- Я могу передать внутреннюю часть a,b в качестве отдельных аргументов во внешнюю, например
def outerF(внутренний,a,b): возврат 53* Внутренний(a,b)
Чего я не понимаю:
Подпись внешнего вызова с innerF(outerF)(a,b)
помощью мне совершенно неизвестна. Также я не мог найти ссылку.
Заранее большое вам спасибо!
Ответ №1:
outerF
необходимо вернуть функцию, которая вызывается с помощью (a, b)
def innerF(a, b): return a b def outerF(func): # define a function to return def f(*args, **kwargs): # this just calls the given func amp; scales it return 55 * func(*args, **kwargs) return f print(outerF(innerF)(1, 2))
Результат:
165 # 55 * (1 2)
Комментарии:
1. Большое вам спасибо — работает как положено!
Ответ №2:
Итак, вам нужны вложенные функции.
outerF(innerF)(a, b)
средство outerF(innerF)
возвращает новую функцию, которая затем принимает a
и b
в качестве аргументов.
Для достижения этой цели вам нужна функция, которая возвращает функцию.
def inner(a, b): return a b def outer(func): def wrapper(a, b): return 55 * func(a, b) return wrapper outer(inner)(2, 3) # 275
Вы также можете применить внешнюю функцию в качестве декоратора.
@outer def inner(a, b): return a b inner(2, 3) # 275
Комментарии:
1. Большое вам спасибо — работает как положено!