你能否将关键字参数扩展与常规关键字参数结合起

时间:2012-03-28 07:14:33

标签: python splat keyword-expansion

我想做的是:

logged_in = {
    'logged_in': True,
    'username' : 'myself',
    }
print render_template('/path/to/template.html',
    **logged_in,
    title = 'My page title',
    more  = 'even more stuff',
    )

但这并不奏效。有没有办法将字典扩展与显式参数结合起来,还是我需要在第二个字典中定义显式参数,合并两个,并展开结果?

2 个答案:

答案 0 :(得分:5)

关键字扩展必须在最后。

print render_template('/path/to/template.html',
    title = 'My page title',
    more  = 'even more stuff',
    **logged_in
)

答案 1 :(得分:1)

是的,你只是倒退了。关键字扩展必须在最后。

def foo(a,b,c,d):
   print [a,b,c,d]

kwargs = {'b':2,'c':3}
foo(1,d=4,**kwargs)
# prints [1, 2, 3, 4]

上面的工作是因为它们是正确的顺序,它们是未命名的参数,命名,然后是关键字扩展(而*表达式可以在命名参数之前或之后,但不能在关键字扩展之后)。但是,如果您要执行这些操作,则会出现语法错误:

 foo(1,**kwargs,d=4)
 foo(d=4,**kwargs,1)
 foo(d=4,1,**kwargs)