部分函数调用作为参数python

Mas*_*asa 2 python function

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

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一个论点传递xf2as z.我将不胜感激任何帮助.

Wil*_*sem 6

是的,这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与上述实现相比,将显着降低开销.


kab*_*nus 5

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

f1(lambda x: f2(10,x), 20)
Run Code Online (Sandbox Code Playgroud)

@Willem 所示的部分更适合您的特定问题,但lambda了解表达式的灵活性是很好的 - 表达式可能会变得比仅部分调用复杂得多。