返回一个具有绑定参数的函数对象?
大家好,
def a(p):
return p+1
def b(func, p):
return func(p)
b(a,10) # 11
我其实不想要结果“11”,我想要的是一个函数对象,并且这个函数的参数已经被绑定了,我们叫它c。
当我使用 c()
或类似的方式时,它能给我结果11,这可能吗?
谢谢!
6 个回答
6
做到这一点的唯一方法,就是把它放在一个lambda表达式里:
c = lambda : b(a,10)
c() # 11
不过,如果你本来就打算给它命名,那这样做其实并没有什么特别的好处,相比于
def c():
b(a,10)
10
你也可以使用functools模块。
import functools
def add(a,b):
return a+b
>> add(4,6)
10
>> plus7=functools.partial(add,7)
>>plus7(9)
16
15
functools
模块提供了一个叫做partial
的函数,它可以让你创建一种叫做“柯里化”的函数:
import functools
def a(p):
return p+1
def b(func, p):
return functools.partial(func, p)
c = b(a,10)
print c() # >> 11
这个功能可以让你给函数传入一些参数,而把剩下的参数留到以后再提供:
def add(a,b):
return a+b
add2 = functools.partial(add, 2)
print add2(10) # >> 12