2

我想做的是:

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

但这不起作用。有没有办法将字典扩展与显式参数结合起来,或者我需要在第二个字典中定义显式参数,合并两者,然后扩展结果?

4

2 回答 2

6

关键字扩展必须在末尾。

print render_template('/path/to/template.html',
    title = 'My page title',
    more  = 'even more stuff',
    **logged_in
)
于 2012-03-28T07:17:48.873 回答
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)
于 2012-03-28T07:18:05.760 回答