📌 Задача:
Ты пишешь функцию
track, которая возвращает список всех значений, которые в неё передавали. Пример поведения:
print(track(1)) # [1]
print(track(2)) # [1, 2]
print(track(3)) # [1, 2, 3]
Реализуй эту функцию.
🎯 Подвох:
- Решение работает без глобальных переменных
- Используется поведение изменяемых аргументов по умолчанию
- Это поведение часто становится причиной багов у новичков — но здесь оно работает на нас
---
✅ Ожидаемый результат:
def track(value, cache=[]):
cache.append(value)
return cache
# Проверка:
print(track(1)) # [1]
print(track(2)) # [1, 2]
print(track(3)) # [1, 2, 3]
🧠 Объяснение подвоха:
- Аргумент
cache=[] вычисляется один раз, при первом вызове функции- Все последующие вызовы используют один и тот же список
- Обычно это считается "ловушкой", но в задачах на замыкание состояния — это полезный трюк
⚠️ Не путай: если внутри функции ты напишешь
cache = [], то всё сломается — потому что создастся новый список каждый раз