Я читал учебник python из Документации по выпуску Python 2.7.10, и я наткнулся на что-то вроде этого.Python Default Arguments Evaluation
Код
def fun1(a,L=[]):
L.append(a)
return L
print fun1(1)
print fun1(2)
print fun1(3)
def fun2(a,L = None):
if L is None:
L=[]
L.append(a)
return L
print fun2(1)
print fun2(2)
print fun2(3)
Выход
[1]
[1, 2]
[1, 2, 3]
[1]
[2]
[3]
Process finished with exit code 0
Если L=[]
в первой функции fun1()
становится вызывается только один раз, выход fun1()
нормально. Но тогда почему L=None
получает вызов каждый раз в fun2()
.
* «почему' L = None' не вызывается каждый раз »* - Я не знаю, что вы пытаетесь сказать с этим. – deceze
Я предполагаю, что 'L = None' получает вызов/выполняется каждый раз. Вот почему условие 'if L is None 'истинно каждый раз во второй функции fun2()'. – psychoCoder
По умолчанию аргументы оцениваются по объявлению функции.Пустой список изменен, поэтому в каждом вызове функции вы редактируете тот же список. При добавлении к нему не создается новый объект. С None, список создается в теле функции. Каждый раз, когда возвращается новый список из функции. –