我想做的是:
logged_in = {
'logged_in': True,
'username' : 'myself',
}
print render_template('/path/to/template.html',
**logged_in,
title = 'My page title',
more = 'even more stuff',
)
但这行不通。有没有办法将字典扩展和显式参数结合起来,或者我需要在第二个字典中定义显式参数,合并两者,然后扩展结果?
关键字扩展必须在末尾。
print render_template('/path/to/template.html',
title = 'My page title',
more = 'even more stuff',
**logged_in
)
是的,你只需要把它倒过来。关键字展开必须在末尾。
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)