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