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