返回一个具有绑定参数的函数对象?

10 投票
6 回答
12079 浏览
提问于 2025-04-16 06:13

大家好,

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

撰写回答