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