Обычно он используется для передачи списка аргументов функции, которая обычно принимает фиксированное количество аргументов, или в определениях функций, чтобы разрешить передачу переменного числа аргументов в стиле обычных аргументов. Например, функция print()
использует переменные, поэтому вы можете делать такие вещи, как print(a,b,c)
.
Один пример из недавнего вопроса SO: вы можете использовать его для передачи списка range()
списков результатов на itertools.product()
без необходимости знать длину списка-списков.
Конечно, вы можете написать каждую библиотечную функцию, чтобы она выглядела так:
def libfunc1(arglist):
arg1 = arglist[1]
arg2 = arglist[2]
...
... но это лишает смысла именовать переменные позиционного аргумента, это в основном именно то, что *args
делает для вас, и это приводит к избыточным скобкам / паренам, поскольку вам придется вызывать такую функцию:
libfunc1([arg1val,arg2val,...])
... что очень похоже на ...
libfunc1(arg1val,arg2val,...)
... за исключением ненужных символов, в отличие от использования *args
.