Выбор ответа Junior Функции и области видимости спрашивают часто обновлено
Изменяемое значение по умолчанию
Вопрос
Что вернёт третий вызов add(3)?
def add(x, acc=[]):
acc.append(x)
return acc
add(1); add(2)
add(3)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [1, 2, 3]. Значение по умолчанию вычисляется один раз при выполнении def, и все вызовы без второго аргумента работают с одним и тем же списком.
Варианты ответа
[3][1, 2, 3]правильный ответTypeError[None, None, 3]
Разбор
Значение по умолчанию вычисляется один раз при выполнении def, и все вызовы без второго аргумента работают с одним и тем же списком. Поэтому он копит элементы: [1], [1, 2], [1, 2, 3]. Исправление: acc=None и if acc is None: acc = [] внутри.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Функции и области видимости»
- Что такое *args и **kwargs
- Перекрытие встроенных имён
- Как передаются аргументы в функцию Python
- Где хранятся переменные замыкания
- Вызов с *args и **kwargs: разбор сигнатуры
- Композиция функций
- Мемоизация через замыкание
- Повтор вызова с ограничением попыток