2012-03-28 4 views
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つをマージして結果を展開する必要がありますか?

答えて

5

キーワードの拡張は最後にする必要があります。

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

実際にこれを投稿してから動作しませんでした。あなたは私にそれを再訪させました。展開の場合、最後の議論の後にコンマを置くことは許されません。 –

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) 
関連する問題