Можете ли вы объединить расширение аргумента с ключевым словом?
Что я хочу сделать, это:
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 ответа
Решение
Расширение ключевого слова должно быть в конце.
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)