根据另一个函数中的位置提取 kwargs 和 args

问题描述

我想围绕另一个函数一个函数的参数建模。例如,如果我有

def f(arg1,arg2=0,otherargs=...):
    # Does something.

然后我想创建一个可以使用相同参数的函数

def g(*):  # Or however best to parameterize.
    arg1 =  # Extract arg1 value.
    arg2 =  # Extract arg2 value,if provided.
    # Do something with arg1 and arg2.
    f_result = f(arg1,arg2,otherargs)
    # Do something else with f_result and return.

这可能吗?

解决方法

这可以通过 inspect.getcallargs 实现:它接受函数、args 和 kwargs,并返回参数字典。使用上面定义的 f 和 g,这看起来像:

import inspect
def f(arg1,arg2=0,otherargs=...):
    # Does something.
    return

def g(*args,**kwargs):  # Or however best to parameterize.
    kwargs = inspect.getcallargs(f,*args,**kwargs)
    arg1 = kwargs["arg1"] # Extract arg1 value.
    arg2 = kwargs["arg2"] # Extract arg2 value,if provided.
    otherargs = kwargs["otherargs"]
    # Do something with arg1 and arg2.
    f_result = f(arg1,arg2,otherargs)
    # Do something else with f_result and return.