Да, у вас это просто задом наперед. Расширение ключевого слова должно быть в конце.
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)