Разберите поведение Python‑функции с дефолтным изменяемым аргументом:
def append_item(val, lst=[]): lst.append(val); return lst
Почему результат может быть неожиданным и как это исправить

18 Ноя в 10:11
3 +3
0
Ответы
1
Проблема: дефолтное значение выражения `lst=[]` создаётся один раз при определении функции и затем переиспользуется во всех последующих вызовах, поэтому один и тот же изменяемый список накапливает элементы.
Пример поведения:
- `append_item(1)` возвращает [1][1][1]
- `append_item(2)` возвращает [1,2][1, 2][1,2] — неожиданно, потому что второй вызов добавил в список от первого
- `append_item(3, [])` возвращает [3][3][3] — при явной передаче нового списка всё нормально
Исправление (использовать None как «сентинел» и создавать новый список внутри функции):
def append_item(val, lst=None):
if lst is None:
lst = []
lst.append(val)
return lst
Теперь:
- `append_item(1)` возвращает [1][1][1]
- `append_item(2)` возвращает [2][2][2]
Альтернативы: использовать неизменяемый дефолт (например, кортеж) или явно копировать дефолтный объект внутри функции, но стандартный и рекомендуемый способ — `lst=None`.
18 Ноя в 10:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир