Преимущества использования * args в python вместо передачи списка в качестве параметра - PullRequest
2 голосов
/ 18 мая 2010

Я прохожу через python, и мне было интересно, каковы преимущества использования * args в качестве параметра перед простой передачей списка в качестве параметра, помимо эстетики?

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

То есть для гибкости .

Позволяет передавать аргументы, не зная, сколько вам нужно. Типичный пример:

def f(some, args, here): # <- this function might accept a varying nb of args
    ...

def run_f(args, *f_args):
    do_something(args)
    # run f with whatever arguments were given:
    f(*f_args)

Не забудьте проверить версию ключевого слова **.

2 голосов
/ 18 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...