Нет, *args
и **kwargs
- это универсальные аргументы, которые получают любые аргументы, для которых нет явных аргументов. Указание значений по умолчанию наносит ущерб их цели. Вместо этого примерные значения по умолчанию можно обрабатывать с помощью существующего синтаксиса , здесь нет необходимости усложнять синтаксис определения функции.
Вы можете указать свои значения по умолчанию, указав обычные аргументы для ключевых слов :
def foo(pos0, pos1='v', a=20, *args, **kwargs):
pass
Я заменил ваше (1, 'v')
'default' другим аргументом ключевого слова, потому что вы можете предоставить значения для аргументов ключевого слова с параметром positional ; foo(42, 'spam')
установит pos1
в 'spam'
.
Кроме того, вы всегда можете выполнить дальнейшую обработку внутри определяемой вами функции; значение args
является кортежем, просто проверьте длину, чтобы проверить, нужно ли использовать значение по умолчанию для пропущенных значений. kwargs
- это словарь, просто используйте kwargs.get(key, default)
или kwargs.pop(key, default)
или if key not in kwargs:
или любой другой dict
метод для обработки отсутствующих ключей.