假设我有以下定义:
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!