如何编写一个返回另一个函数的函数?
在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。
谢谢您添加对currying的引用。我只希望我能两次上瘾。 – HeatfanJohn
所以你传入的'10'存储在某个地方?它什么时候被垃圾收集? – sudo
@sudo查看https://en.wikipedia.org/wiki/Closure_(computer_programming) –
只是想指出的是,你可以用pymonad
import pymonad
@pymonad.curry
def add(a, b):
return a + b
add5 = add(5)
add5(4)
9
做到这一点使用lambda表达式,也被称为匿名函数,你可以抽象出volume
功能make_cylinder_volume_func
里面一行。与ÓscarLópez的答案没有任何区别,使用lambda的解决方案仍然在某种意义上“更实用”。
这是如何使用lambda表达式写公认的答案:
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
http://stackoverflow.com/questions/245192/what-are-first-class-objects –