значения по умолчанию для аргумента переменной перечисляют в Python

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

Что-то как:

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

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

5
задан deamon 3 May 2010 в 16:14
поделиться

2 ответа

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

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

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

5
ответ дан 14 December 2019 в 13:29
поделиться

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

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

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]

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

1
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: