部分函数调用作为参数python

时间:2017-12-31 14:17:04

标签: python function

以下代码是否有任何作用?

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。 我将不胜感激。

2 个答案:

答案 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表达式很容易知道灵活性 - 表达式可能变得比部分调用复杂得多。