解析函数中的默认参数而不执行它们

Parsing default arguments in functions without executing the them

我需要将一个函数(不调用它)传递给另一个函数,但我需要为默认参数指定一个不同的值。

例如:

def func_a(input, default_arg=True):
    pass

def func_b(function):
    pass

func_b(func_a(default_arg=False))

然而,这 调用 func_a() 并将结果传递给 func_b()

如何在不执行func_a的情况下设置default_arg=False

使用 functools.partial() object:

from functools import partial

func_b(partial(func_a, default_arg=False))

partial() 对象也是一个可调用对象,当被调用时,它会将您给它的参数应用于第一个参数。

演示:

>>> from functools import partial
>>> def func_a(input, default_arg=True):
...     print('func_a() called with {!r}, and default_arg={!r}'.format(input, default_arg))
...
>>> def func_b(function):
...     print('Calling the function')
...     function('Foo bar')
...
>>> func_b(partial(func_a, default_arg=False))
Calling the function
func_a() called with 'Foo bar', and default_arg=False

使用 lambda 函数。像这样:

func_b(lambda input: func_a(input, default_arg=False))

func_b 中,您将有一个可调用的 function,它接受参数输入并使用先前指定的 default_arg 参数执行 func_a


感谢 cdarke 的建议:

from functools import partial, wraps

def func_wrapper(f, **kwargs):
    @wraps(f)
    def wrapper(input):
        return f(input, **kwargs)
    return wrapper
func_b(func_wrapper(func_a, default_arg=False))