Можно ли установить значение по умолчанию для списка переменных аргументов в Python 3?
Что-то вроде:
def do_it(*args=(2, 5, 21)): pass
Интересно, что список переменных аргументов имеет тип tuple, но здесь не допускается кортеж.
tuple
Если не синтаксически, то в зависимости от того, какое поведение вы хотите:
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
должен это сделать.
Инициализация такого списка обычно не очень хорошая идея.
Значение по умолчанию оценивается только один раз. Это имеет значение, когда по умолчанию используется изменяемый объект, такой как список, словарь или экземпляры большинства классов. Например, следующая функция накапливает аргументы, переданные ей при последующих вызовах
def f(a, L=[]): L.append(a) return L print f(1) print f(2) rint f(3)
Это напечатает
[1] [1, 2] [1, 2, 3]
Я обычно проверяю, что что-то передается, а если нет, то инициирую это в теле функции.