Как написать функцию, которая возвращает другую функцию?
В Python я хотел бы написать функцию make_cylinder_volume(r)
, которая возвращает другую функцию. Эта возвращаемая функция должна быть вызвана с параметром h
и вернуть объем цилиндра с высотой h
и радиусом r
.
Я знаю, как возвращать значения из функций в Python, но как вернуть другую функцию?
Ответы
Ответ 1
Попробуйте это, используя Python:
import math
def make_cylinder_volume_func(r):
def volume(h):
return math.pi * r * r * h
return volume
Используйте его так, например, с radius=10
и height=5
:
volume_radius_10 = make_cylinder_volume_func(10)
volume_radius_10(5)
=> 1570.7963267948967
Обратите внимание, что возвращение функции было простым вопросом определения новой функции внутри функции и возврата ее в конце - старательно передать соответствующие параметры для каждой функции. FYI, метод возврата функции из другой функции называется currying.
Ответ 2
Просто хочу указать, что вы можете сделать это с помощью pymonad
import pymonad
@pymonad.curry
def add(a, b):
return a + b
add5 = add(5)
add5(4)
9
Ответ 3
Используя lambdas, также известные как анонимные функции, вы можете абстрагировать функцию volume
внутри make_cylinder_volume_func
до одной строки. Ни в коем случае не отличие от Оскара Лопеса, решение с использованием лямбда по-прежнему в некотором смысле "более функционально".
Вот как вы можете написать принятый ответ, используя выражение лямбда:
import math
def make_cylinder_volume_fun(r):
return lambda h: math.pi * r * r * h
И затем вызовите, как и любая другая карри-функция:
volume_radius_1 = make_cylinder_volume_fun(1)
volume_radius_1(1)
=> 3.141592653589793