SyntaxError с передачей ** kwargs и конечной запятой

Интересно, почему это SyntaxError в Python 3.4:

some_function(
  filename = "foobar.c",
  **kwargs,
)

Он работает при удалении конечной запятой после **kwargs.

Ответ 1

Как указывал vaultah (который почему-то не удосужился опубликовать ответ), это было сообщено об отслеживании проблем и с тех пор было изменено. Синтаксис будет работать отлично, начиная с Python 3.6.

Чтобы быть явным, да, я хочу разрешить конечную запятую даже после *args или **kwds. И это то, что делает патч. - Гвидо ван Россум

Ответ 2

Причина, по которой она была первоначально запрещена, состоит в том, что **kwargs был последним разрешенным элементом в списке аргументов - после него ничего не получилось; однако выглядит следующим образом:

Это изменилось, и теперь мы можем позвонить с несколькими ключевыми словами dicts:

some_func(a, b, **c, **d,)

Для обеспечения согласованности конечные запятые теперь поддерживаются как в определениях, так и в вызовах функций. Это действительно полезно, если у вас есть несколько аргументов или несколько длинных аргументов, и поэтому логическая строка разделяется на несколько физических линий.

Конечные запятые необязательны в обоих местах.