3

假设我有以下定义:

def foo(x, y):
    return x + y

然后我想要一个函数的副本foo(我们称之为bar),其中x总是等于0

bar(4)会返回4

我怎样才能在 Python 中做到这一点?

谢谢!

4

2 回答 2

6

也许是这样的:

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) )
于 2013-07-27T04:53:04.520 回答
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!
于 2013-07-27T05:01:38.550 回答