嵌套Python kwargs

嵌套Python kwargs,python,keyword-argument,Python,Keyword Argument,在字典中嵌套kwargs是一件有害的事情吗?我已经使用过这种技术好几次了,主要是当我有一个很长的调用方链时,如果我在调用方列表中做了一个深层次的更改,我会尽量避免更改他们所有的参数。什么是更安全的替代方案,例如,在bar_kwargs字典中拼写错误的baz_kwargs会自动失败,这让我可以保持一些易于配置的功能 def baz(mx, n = 10, delim = '|'): print '{}'.format(delim).join([str(mx)]*n) def bar(mx

在字典中嵌套kwargs是一件有害的事情吗?我已经使用过这种技术好几次了,主要是当我有一个很长的调用方链时,如果我在调用方列表中做了一个深层次的更改,我会尽量避免更改他们所有的参数。什么是更安全的替代方案,例如,在bar_kwargs字典中拼写错误的baz_kwargs会自动失败,这让我可以保持一些易于配置的功能

def baz(mx, n = 10, delim = '|'):
    print '{}'.format(delim).join([str(mx)]*n)

def bar(mx, double = False, baz_kwargs = {}, **my_kwargs):
    if double:
        mx *= 2
    baz(mx, **baz_kwargs)

def foo(a, b = 1, bar_kwargs = {}):
    bar(b * a, **bar_kwargs)

if __name__ == '__main__':
     bar_kwargs = {'double' : True,
              'baz_kwargs' : {'delim' : '|'}}
     foo(10, b = 2, bar_kwargs = bar_kwargs)

它破坏了封装,因为调用方不仅要知道被调用的签名,还要知道内部函数调用的签名。bar_kwargs={}单是一个坏主意。@TomDalton True。我澄清了这个问题:有什么替代方法可以让我保持这种方法的可配置性,而不必在调用链上进行太多修改,同时“更安全”?@padraiccnningham:在这种情况下,可变默认参数是无害的,因为没有任何函数修改它们传递的字典。这是一件需要非常小心的事情。@Blckknght,我不知道OP到底在做什么。