Выбор ответа Junior Функции и области видимости спрашивают часто обновлено

Изменяемое значение по умолчанию

Вопрос

Что вернёт третий вызов add(3)?

def add(x, acc=[]):
    acc.append(x)
    return acc

add(1); add(2)
add(3)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: [1, 2, 3]. Значение по умолчанию вычисляется один раз при выполнении def, и все вызовы без второго аргумента работают с одним и тем же списком.

Варианты ответа

  1. [3]
  2. [1, 2, 3]правильный ответ
  3. TypeError
  4. [None, None, 3]

Разбор

Значение по умолчанию вычисляется один раз при выполнении def, и все вызовы без второго аргумента работают с одним и тем же списком. Поэтому он копит элементы: [1], [1, 2], [1, 2, 3]. Исправление: acc=None и if acc is None: acc = [] внутри.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.