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',
    )

しかし、それはうまくいきません。辞書の展開を明示的な引数と組み合わせる方法はありますか、または明示的な引数を2番目の辞書で定義し、2つをマージして結果を展開する必要がありますか?

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 に答える