Действительно ли возможно установить значение по умолчанию для списка аргумента переменной в Python 3?
Что-то как:
def do_it(*args=(2, 5, 21)):
pass
Интересно, что список аргумента переменной имеет тип 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)
This will print
[1]
[1, 2]
[1, 2, 3]
Я обычно проверяю, передано ли что-то, и если нет, то инициирую это в теле функции.