以下代码是否有任何作用?
def f1(f2, x):
return f2(x)
def f2(y, z):
return y + z
f1(f2(10, ), 20)
output 30
Run Code Online (Sandbox Code Playgroud)
f2功能失误z.所以,我想把f1一个论点传递x给f2as z.我将不胜感激任何帮助.
是的,这functools.partial就是全部:
from functools import partial
f1(partial(f2, 10), 20)Run Code Online (Sandbox Code Playgroud)
partial将一个函数f,一个任意数量的未命名和命名参数作为输入.它构造了一个新函数,其中已经填充了未命名和已命名的参数.
它有点相当于:
def partial(func, *partialargs, **partialkwargs):
def g(*args, **kwargs):
fargs = partialargs + args
fkwargs = partialkwargs.copy()
fkwargs.update(kwargs)
return func(*farg, **fkwargs)
return g
Run Code Online (Sandbox Code Playgroud)
但functools与上述实现相比,将显着降低开销.
显示lambda表达式的另一个选项 :
f1(lambda x: f2(10,x), 20)
Run Code Online (Sandbox Code Playgroud)
@Willem 所示的部分更适合您的特定问题,但lambda了解表达式的灵活性是很好的 - 表达式可能会变得比仅部分调用复杂得多。