В Python порядок, в котором мы передаем (и получаем) аргументы функции, имеет значение.
Позиционные аргументы идут первыми, переменной длины далее идут аргументы, аргументы ключевого слова переменной длины идут последними.
Ожидаемый синтаксис выглядит следующим образом:
function(arg, *args, **kwargs)
Приведенные выше имена аргументов являются лишь стандартными примерами, поэтому реальная функция будет выглядеть так:
about_user(name, *hobbies, **favorite_foods)
Если мы вызываем (или получаем) с неупорядоченными типами аргументов, мы получаем ошибки, аналогичные той, с которой вы столкнулись. В вашем конкретном случае c ваши аргументы ключевых слов являются первыми, когда они должны быть последними.
Я написал небольшую статью о *args
и **kwargs
, в которой есть еще несколько связанные детали и примеры.