Подтвердить что ты не робот

Как написать функцию, которая возвращает другую функцию?

В Python я хотел бы написать функцию make_cylinder_volume(r), которая возвращает другую функцию. Эта возвращаемая функция должна быть вызвана с параметром h и вернуть объем цилиндра с высотой h и радиусом r.

Я знаю, как возвращать значения из функций в Python, но как вернуть другую функцию?

4b9b3361

Ответ 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