假设我有以下定义:
def foo(x, y):
return x + y
然后我想要一个函数的副本foo
(我们称之为bar
),其中x
总是等于0
。
即bar(4)
会返回4
。
我怎样才能在 Python 中做到这一点?
谢谢!
也许是这样的:
bar = lambda y: foo (0, y)
如果您想删除 foo,正如用户指出的那样,您可以使用:
def foo (x, y): return x + y
bar = (lambda f: lambda y: f (0, y) ) (foo)
print (bar (4) )
del foo
print (bar (4) )
functools.partial
是一种有效的方法:
import functools
bar = functools.partial(foo, 0)
bar(4) == 4
它还允许您提供未绑定到变量的函数,或在创建partial
对象后重新绑定变量,这可以防止循环或推导式错误:
from operator import add, sub, mul
funcs = [lambda x: foo(3, x) for foo in add, sub, mul]
funcs[0](3) == 9 # Not 6!
funcs = [functools.partial(foo, 3) for foo in add, sub, mul]
funcs[0](3) == 6 # Works!