Каковы последствия использования непостоянных типов в качестве аргументов по умолчанию в Python?
Возможные дубликаты:
Почему синтаксис "изменяемый аргумент по умолчанию изменчив" так ужасен, спрашивает новичка Python
Наименьшее удивление в Python: изменяемый аргумент по умолчанию
Вот пример.
def list_as_default(arg = []):
pass
1 ответ
От: http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html
Значение по умолчанию оценивается только один раз. Это имеет значение, когда по умолчанию используется изменяемый объект, такой как список, словарь или экземпляры большинства классов. Например, следующая функция накапливает аргументы, переданные ей при последующих вызовах:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
Это напечатает
[1]
[1, 2]
[1, 2, 3]
Если вы не хотите, чтобы значение по умолчанию было общим для последующих вызовов, вы можете написать такую функцию:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L