以下代码是否有任何作用?
def f1(f2, x):
return f2(x)
def f2(y, z):
return y + z
f1(f2(10, ), 20)
output 30
f2
函数未命中z
。因此,我希望f1
将参数x
传递给f2
z
。
我将不胜感激。
答案 0 :(得分:5)
是的,这就是functools.partial
的全部内容:
from functools import partial
f1(partial(f2, 10), 20)
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
但与上述实施相比,functools
将显着降低开销。
答案 1 :(得分:4)
显示lambda
表达式的另一个选项:
f1(lambda x: f2(10,x), 20)
@Willem所显示的部分更适合您的特定问题,但lambda
表达式很容易知道灵活性 - 表达式可能变得比部分调用复杂得多。