Рассмотрите следующий фрагмент на Python: def func(items=[]): items.append(1); return items; Объясните, почему вызов func() несколько раз возвращает нарастающий список, и предложите безопасную альтернативу.

17 Ноя в 09:51
4 +1
0
Ответы
1
Кратко — потому что значение параметра по умолчанию вычисляется один раз при определении функции, а не при каждом вызове. В вашем примере это один и тот же список, и операция `append` модифицирует его "на месте", поэтому последовательные вызовы накапливают элементы.
Пример поведения:
- первый вызов возвращает [1][1][1],
- второй — [1,1][1,1][1,1],
- третий — [1,1,1][1,1,1][1,1,1].
Безопасная альтернатива — использовать значение по умолчанию `None` и создавать новый список внутри функции:
```python
def func(items=None):
if items is None:
items = []
items.append(1)
return items
```
Теперь каждый вызов без аргумента вернёт новый список [1][1][1]. Если вы специально хотите иметь общий накапливающий список — тогда текущее поведение с мутабельным значением по умолчанию подходит, но его нужно документировать явно.
17 Ноя в 09:58
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир