我如何编写一个返回另一个函数的函数?

在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=10height=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_funcvolume函数抽象为一行。 与Ó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