Питон: Как передать функцию с двумя параметрами в качестве аргумента

#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. Большое вам спасибо — работает как положено!