Можете ли вы объединить расширение аргумента с ключевым словом?

Что я хочу сделать, это:

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)
Другие вопросы по тегам