我如何编写一个返回另一个函数的函数?
在Python中,我想写一个函数make_cylinder_volume(r)
,它返回另一个函数。 返回的函数应该用参数h
调用,并返回高度为h
,半径为r
的圆柱体积。
我知道如何从Python中的函数返回值 ,但是如何返回另一个函数呢?
试试这个,使用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
注意,返回一个函数是一个简单的事情,在函数内部定义一个新的函数,最后返回它 – 仔细地为每个函数传递适当的参数。 仅供参考,从另一个函数返回函数的技巧被称为currying 。
只是想指出,你可以用pymonad做到这一点
import pymonad @pymonad.curry def add(a, b): return a + b add5 = add(5) add5(4) 9
使用lambdas(也称为匿名函数),可以将make_cylinder_volume_func
的volume
函数抽象为一行。 与ÓscarLópez的答案没有任何区别,使用lambda的解决scheme仍然在某种意义上“更实用”。
这是如何使用lambdaexpression式来写入接受的答案:
import math def make_cylinder_volume_fun(r): return lambda h: math.pi * r * r * h
然后像其他任何咖喱function一样调用:
volume_radius_1 = make_cylinder_volume_fun(1) volume_radius_1(1) => 3.141592653589793