Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции *args
и **kwargs
.
На самом деле названия переменных – args
, kwargs
– это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.
Можно заменить *args
на *vars
, а **kwargs
на **options
или другое слово. Программа будет работать корректно, но другие разработчики могут вас не понять.
def test_args(farg, *args): print("Первый известный аргумент: ", farg) for arg in args: print("Один из оставшихся аргументов: ", arg) test_args(1, "two", 3) # Первый известный аргумент: 1 # Один из оставшихся аргументов: two # Один из оставшихся аргументов: 3 def test_kwargs(farg, **kwargs): print("Первый известный аргумент: ", farg) for key in kwargs: print("Один из оставшихся аргументов: %s: %s" % (key, kwargs[key])) test_kwargs(farg=1, myarg2="two", myarg3=3) # formal arg: 1 # Один из оставшихся аргументов: myarg2: two # Один из оставшихся аргументов: myarg3: 3
Конструкции *args
и **kwargs
можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg
обрабатывается отдельно, а все остальные собираются в коллекцию.