Почему **kwargs нельзя располагать до *args?

Почему возникает ошибка invalid syntax при изменении порядка следования **kwargs и *args?

  File "<ipython-input-3-efe9f896dc4b>", line 1
    def some_function(a, b, **kwargs, *args):
                                      ^
SyntaxError: invalid syntax

Не могу найти внятного объяснения кроме "делай так, иначе будет ошибка invalid syntax"


Ответы (1 шт):

Автор решения: Евгений

Приведу пример более простой ситуации.
Эта функция корректна:

def a(arg1, arg2 = 3):
    pass

Эта функция содержит синтаксическую ошибку:

def a(arg2 = 3, arg1):
    pass

Причина этому - что a(315) полностью лишает значение по умолчанию смысла, т.к. в любом случае функции потребуется 2 аргумента, чтобы заполнить ещё и arg1

В ситуации с *args и **kwargs вопрос последовательности - вопрос порядка в коде (а python структурируется именно так, чтобы в коде был порядок).
Чтобы не нарушать структуру "сначала неименованные параметры, потом именованные", **kwargs не может идти перед *args

→ Ссылка