TGViewer
Python академия Python академия @pythonofff · 7.14K subscribers
Post #3487 1.17K
🐍 Ловушка с аргументами по умолчанию

Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции?


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


📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
  • 👍 7
More from @pythonofff
  1. Sep 24, 2026Анонимные функции Часто функции нужны только один раз, причем короткие. И избыточно создав…
  2. Sep 23, 2026Бесконечные списки Мы уже рассказывали про важность копирования списков. Но именно из-за т…
  3. Sep 21, 2026Заглушки Для создания пустых функций и классов есть сразу два способа соответствующих прав…
  4. Sep 20, 2026Параметры функции *args, **kwargs Думаю, многие хоть раз видели такую запись, сейчас мы уз…
  5. Sep 18, 2026В одну строчку Python гибкий язык и позволяет многое сделать в одну строчку. К примеру, ма…
  6. Sep 16, 2026Распаковка Неудобно каждый раз для вывода объединять строки через join() или тем более как…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →