2012-03-28 61 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', 
    ) 

但是,這並不工作。有什麼方法可以將字典擴展與顯式參數結合起來,還是需要在第二個字典中定義顯式參數,合併這兩個字符並擴展結果?

回答

5

關鍵字擴展必須結束。

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

我實際上在發佈之前試過,它沒有工作。你讓我重新審視它,結果證明你不允許在最後一個參數後面加一個逗號,如果它是一個擴展。 – 2012-03-28 07:22:21

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) 
相關問題