Почему **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