🐍 Ловушка с аргументами по умолчанию Посмотрите на код ниже.
Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции?
def append_to(num, target=[]):
target.append(num)
return target
print(append_to(1))
print(append_to(2))
Варианты ответа:
1. [1] и [2]
2. [1] и [1, 2]
3. Ошибка SyntaxError
⬇️ Правильный ответ и объяснение ⬇️
Правильный ответ: 2 — [1] и [1, 2]
Почему?
В Python аргументы по умолчанию вычисляются один раз при определении функции, а не при каждом вызове. Список target создается один раз и сохраняет свое состояние между вызовами.
✅ Как исправить?
Используйте None в качестве значения по умолчанию:
def append_to(num, target=None):
if target is None:
target = []
target.append(num)
return target
Подписывайтесь на канал 👉 @python_of