В приведённом фрагменте Python объясните поведение и предложите исправление: def add(x, lst=[]): lst.append(x) return lst; Что произойдёт при последовательных вызовах add(1), add(2) и почему

10 Ноя в 06:59
2 +1
0
Ответы
1
Поведение: по умолчанию список в заголовке lst=[]lst=[]lst=[] создаётся один раз при определении функции и затем переиспользуется. При изменении этого объекта (например, вызовом lst.appendlst.appendlst.append) изменения сохраняются между вызовами.
Последовательные вызовы:
- add(1)add(1)add(1) вернёт [1][1][1].
- затем add(2)add(2)add(2) вернёт [1,2][1,2][1,2] — потому что оба вызова работают с одним и тем же списком.
Исправление (без использования мутируемого значения по умолчанию):
def add(x, lst=None):
if lst is None:
lst = []
lst.append(x)
return lst
Теперь add(1)add(1)add(1) даст [1][1][1], а отдельный вызов add(2)add(2)add(2) (без передачи второго аргумента) даст [2][2][2].
10 Ноя в 07:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир