dan*_*ast 4 python arguments kwargs
我正在重构一段代码,我遇到了以下问题.我有一个巨大的参数列表,现在我想传递给它kwargs.代码是这样的:
def f(a, b, c, ...):
print a
...
f(a, b, c, ...)
Run Code Online (Sandbox Code Playgroud)
我正在重构它:
data = dict(a='aaa', b='bbb', c='ccc', ...)
f(**data)
Run Code Online (Sandbox Code Playgroud)
这意味着我必须这样做:
def f(**kwargs):
print kwargs['a']
...
Run Code Online (Sandbox Code Playgroud)
但这是一个皮塔饼.我想保留:
def f(**kwargs):
# Do some magic here to make the kwargs directly accessible
print a
...
Run Code Online (Sandbox Code Playgroud)
是否有任何直接的方法kwargs dict可以直接访问参数,也许通过使用一些帮助类/库?
有一些方法 - 但你也可以像这样包装你的函数:
def f(**kwargs):
arg_order = ['a', 'b', 'c', ...]
args = [kwargs.get(arg, None) for arg in arg_order]
def _f(a, b, c, ...):
# The main code of your function
return _f(*args)
Run Code Online (Sandbox Code Playgroud)
样品:
def f(**kwargs):
arg_order = ['a', 'b', 'c']
args = [kwargs.get(arg, None) for arg in arg_order]
def _f(a, b, c):
print a, b, c
return _f(*args)
data = dict(a='aaa', b='bbb', c='ccc')
f(**data)
Run Code Online (Sandbox Code Playgroud)
输出:
>>>
aaa bbb ccc
Run Code Online (Sandbox Code Playgroud)
函数内部:
for k, v in kwargs.iteritems():
locals()[k] = v
Run Code Online (Sandbox Code Playgroud)