resueltos propias otra lista globales funciones funcion ejercicios ejemplos dentro comando python function functional-programming currying

propias - lista de funciones de python



¿Cómo escribo una función que devuelve otra función? (3)

En Python, me gustaría escribir una función make_cylinder_volume(r) que devuelve otra función. Esa función devuelta debe ser invocable con un parámetro h , y devolver el volumen de un cilindro con altura h y radio r .

Sé cómo devolver los valores de las funciones en Python, pero ¿cómo devuelvo otra función ?


Pruebe esto, usando Python:

import math def make_cylinder_volume_func(r): def volume(h): return math.pi * r * r * h return volume

Úselo así, por ejemplo, con radius=10 y height=5 :

volume_radius_10 = make_cylinder_volume_func(10) volume_radius_10(5) => 1570.7963267948967

Tenga en cuenta que devolver una función fue una simple cuestión de definir una nueva función dentro de la función y devolverla al final, teniendo cuidado de pasar los parámetros apropiados para cada función. FYI, la técnica de devolver una función desde otra función se conoce como currying .


Solo quiero señalar que puedes hacer esto con pymonad

import pymonad @pymonad.curry def add(a, b): return a + b add5 = add(5) add5(4) 9


Usando lambdas, también conocidas como funciones anónimas, puede abstraer la función de volume dentro de make_cylinder_volume_func a una sola línea. De ninguna manera, diferente a la respuesta de Óscar López, la solución que utiliza lambda todavía es, en cierto sentido, "más funcional".

Así es como puedes escribir la respuesta aceptada usando una expresión lambda:

import math def make_cylinder_volume_fun(r): return lambda h: math.pi * r * r * h

Y luego llame como lo haría con cualquier otra función al curry:

volume_radius_1 = make_cylinder_volume_fun(1) volume_radius_1(1) => 3.141592653589793