如何在Python中复制函数并设置默认参数?

Cis*_*tin 3 python methods

假设我有以下定义:

def foo(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

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

bar(4)会返回4.

我怎么能用Python做到这一点?

谢谢!

use*_*ica 6

functools.partial是执行此操作的有效方法:

import functools
bar = functools.partial(foo, 0)
bar(4) == 4
Run Code Online (Sandbox Code Playgroud)

它还允许您提供未绑定到变量的函数,或者在创建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!
Run Code Online (Sandbox Code Playgroud)


Hyp*_*eus 5

也许是这样的:

bar = lambda y: foo (0, y)
Run Code Online (Sandbox Code Playgroud)

如果你想删除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) )
Run Code Online (Sandbox Code Playgroud)