Jul*_*Das 72 python functional-programming function currying
在Python中,我想编写一个make_cylinder_volume(r)
返回另一个函数的函数.返回的函数应该可以使用参数调用h
,并返回具有高度h
和半径的圆柱体积r
.
我知道如何从Python中的函数返回值,但是如何返回另一个函数?
Ósc*_*pez 151
试试这个,使用Python:
import math
def make_cylinder_volume_func(r):
def volume(h):
return math.pi * r * r * h
return volume
Run Code Online (Sandbox Code Playgroud)
像这样使用它,例如:radius=10
和height=5
:
volume_radius_10 = make_cylinder_volume_func(10)
volume_radius_10(5)
=> 1570.7963267948967
Run Code Online (Sandbox Code Playgroud)
请注意,返回一个函数是一个简单的问题,即在函数内部定义一个新函数,并在最后返回它 - 小心地为每个函数传递适当的参数.仅供参考,从另一个函数返回函数的技术称为currying.
Dav*_*ito 13
使用lambdas(也称为匿名函数),可以将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
Run Code Online (Sandbox Code Playgroud)
然后打电话给你任何其他咖喱功能:
volume_radius_1 = make_cylinder_volume_fun(1)
volume_radius_1(1)
=> 3.141592653589793
Run Code Online (Sandbox Code Playgroud)
Ero*_*mic 10
只是想指出你可以用pymonad做到这一点
import pymonad
@pymonad.curry
def add(a, b):
return a + b
add5 = add(5)
add5(4)
9
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
69243 次 |
最近记录: |