Python:如何使用变量传递参数名称

Zha*_*g18 4 python parameter-passing

我正在使用的模块具有许多定义有不同参数名称的函数,它们或多或少地具有相同的目的:

def func1(start_date):
    ....
def func2(startdate):
    ....
def func3(s_date):
    ....
def func4(sdate):
    ....
Run Code Online (Sandbox Code Playgroud)

并且它们都出现在参数列表的不同位置(在上述简化情况下,它们都位于位置1,但实际上并非如此)。

我想编写一个包装,该包装可以通过start_date从函数名到参数名的字典将实际值传递给任何这些函数:

def func2arg_name():
    return {'func1' : 'start_date', 
            'func2' : 'startdate', 
            'func3' : 's_date', 
            'func4' : 'sdate' }
Run Code Online (Sandbox Code Playgroud)

然后是实际的包装器:

f2a = func2arg_name()
def func(func_name, sdate):
    locals()[func_name](f2a[func_name] = sdate)

func('func1', '20170101')
Run Code Online (Sandbox Code Playgroud)

显然,这是行不通的。本质上,f2a [func_name]未被识别为合法关键字。有谁知道该怎么做,即使用变量传递参数名称吗?注意func1func4外部定义,不能更改。

Dav*_*ger 5

使用参数名称作为键来创建字典,然后使用unpack运算符将其传递:

locals()[func_name](**{f2a[func_name]: sdate})
Run Code Online (Sandbox Code Playgroud)

请参阅Python教程中的解压缩参数列表