значения по умолчанию для списка аргументов переменных в Python - PullRequest
4 голосов
/ 03 мая 2010

Можно ли установить значение по умолчанию для списка переменных аргументов в Python 3?

Что-то вроде:

def do_it(*args=(2, 5, 21)):
     pass

Интересно, что список переменных аргументов имеет тип tuple, но здесь не допускается кортеж.

Ответы [ 2 ]

5 голосов
/ 03 мая 2010

Если не синтаксически, то в зависимости от того, какое поведение вы хотите:

def do_it(*args):
    if not args: args = (2, 5, 21)

или

def do_it(a=2, b=5, c=21, *args):
    args = (a,b,c)+args

должен это сделать.

1 голос
/ 03 мая 2010

Инициализация такого списка обычно не очень хорошая идея.

Значение по умолчанию оценивается только один раз. Это имеет значение, когда по умолчанию используется изменяемый объект, такой как список, словарь или экземпляры большинства классов. Например, следующая функция накапливает аргументы, переданные ей при последующих вызовах

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
rint f(3)

Это напечатает

[1]
[1, 2]
[1, 2, 3]

Я обычно проверяю, что что-то передается, а если нет, то инициирую это в теле функции.

...