Я начинающий питон, читая "учебник python", он говорит, что если у нас есть функция:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
Откроется
[1]
[1, 2]
[1, 2, 3]
Поскольку значение по умолчанию оценивается только один раз, а list - изменяемый объект. Я могу это понять.
И он говорит continue, если мы не хотим, чтобы по умолчанию были разделены между подзадачами, мы можем:
def f(a, L=None):
if L is None: #line 2
L = []
L.append(a)
return L
print f(1)
print f(2)
print f(3)
и это выведет:
[1]
[2]
[3]
Но почему? Как это объяснить. Мы знаем, что значение по умолчанию оценивается только once
, и когда мы вызываем f (2), L не является None и что if
(в строке 2) не может быть истинным, поэтому L.append(a) == [1, 2]. Могу ли я предположить, что значение по умолчанию снова оценивается для некоторой причины, но что такое "по какой-то причине", просто потому, что интерпретатор python видит if L is None: L = []