我使用的模块有许多用不同参数名定义的函数或多或少用于同一目的:
def func1(start_date):
....
def func2(startdate):
....
def func3(s_date):
....
def func4(sdate):
....
并且它们出现在参数列表的不同位置(在上面简化的情况下,它们全部位于第1位,但实际上并非如此)。
我想编写一个包装器,它可以通过从函数名到参数名的字典将实际start_date
传递给这些函数中的任何一个:
def func2arg_name():
return {'func1' : 'start_date',
'func2' : 'startdate',
'func3' : 's_date',
'func4' : 'sdate' }
然后是实际的包装器:
f2a = func2arg_name()
def func(func_name, sdate):
locals()[func_name](f2a[func_name] = sdate)
func('func1', '20170101')
显然这不起作用。基本上f2a [func_name]不被识别为合法关键字。有没有人知道如何做到这一点,即使用变量传递参数名称?注意func1
到func4
是外部定义的,无法更改。
答案 0 :(得分:4)
使用参数名作为键创建一个dict,并使用unpack运算符传递它:
request({
url: url,
agentOptions: {
rejectUnauthorized: false
}
}, function (err, resp, body) {
// ...
});
请参阅Python教程中的Unpacking argument lists。