部分函数调用作为参数python

Partial function call as an argument python

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
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
我将不胜感激任何帮助。


是的,这就是functools.partial的全部内容:

1
2
3
from functools import partial

f1(partial(f2, 10), 20)

partial将函数f,任意数量的未命名和命名参数作为输入。 它构造了一个新函数,其中已经填充了未命名和已命名的参数。

它有点相当于:

1
2
3
4
5
6
7
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将显着降低开销。


显示lambda表达式的另一个选项:

1
f1(lambda x: f2(10,x), 20)

@Willem显示的部分更适合您的特定问题,但lambda表达式很容易知道灵活性 - 表达式可能变得更加复杂,只是部分调用。