我正在重构一段代码,并且遇到了以下问题。我有一个庞大的参数列表,现在我想将其作为kwargs传递。代码是这样的:

def f(a, b, c, ...):
  print a
  ...

f(a, b, c, ...)

我将其重构为:
data = dict(a='aaa', b='bbb', c='ccc', ...)
f(**data)

这意味着我必须做:
def f(**kwargs):
  print kwargs['a']
  ...

但这是皮塔饼。我想保留:
def f(**kwargs):
  # Do some magic here to make the kwargs directly accessible
  print a
  ...

是否可以通过使用一些帮助程序类/库来直接访问kwargs dict中的参数的任何直接方法?

最佳答案

some ways-但您也可以像这样包装函数:

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)

样本:
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)

输出:
>>>
aaa bbb ccc

关于python - 使kwargs可以直接访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20116033/

10-12 21:57