Разберите код на Python: def add_items(lst=[]): lst.append(1); return lst — почему этот код даёт неожиданные результаты при многократных вызовах и как это исправить?

23 Мар в 09:40
34 +1
0
Ответы
1
Проблема: параметр по умолчанию `lst=[]` создаётся один раз при определении функции и потом используется повторно при всех вызовах. Поскольку список изменяемый, вызовы накапливают элементы в одном и том же объекте.
Пример поведения:
- первый вызов `add_items()` вернёт [1][1][1],
- второй вызов вернёт [1,1][1, 1][1,1],
- третий — [1,1,1][1, 1, 1][1,1,1].
Причина: объект–значение по умолчанию не копируется при каждом вызове, он общий для всех вызовов функции.
Как исправить (стандартный способ):
def add_items(lst=None):
if lst is None:
lst = []
lst.append(1)
return lst
Теперь каждый вызов без аргумента создаёт новый список и вернёт [1][1][1].
Альтернативы:
- явно передавать новый список при вызове: `add_items([])`,
- использовать неизменяемый дефолт и конструировать новый список внутри: `return (lst or []) + [1]` (создаёт новый список).
23 Мар в 09:46
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир