715просмотров
38.1%от подписчиков
25 февраля 2026 г.
Score: 787
🐍 Изменяемые аргументы по умолчанию – тихий источник багов На первый взгляд код выглядит нормально: def add_item(item, items=[]): items.append(item) return items Проверяем: print(add_item(1)) # [1] print(add_item(2)) # [1, 2] Почему список не обнуляется? В чём проблема? Аргументы по умолчанию в Python создаются один раз, в момент определения функции, а не при каждом вызове. То есть items=[] – это один и тот же список в памяти, который используется повторно. Что происходит под капотом? Когда Python видит: def f(x=[]): ... Он создаёт список один раз. Дальше каждый вызов функции работает с тем же объектом. Правильный способ ✔️ def add_item(item, items=None): if items is None: items = [] items.append(item) return items Теперь: print(add_item(1)) # [1] print(add_item(2)) # [2] Каждый вызов получает новый список. Когда это особенно опасно? • в API-функциях • в классах • в сервисах с большим количеством вызовов • когда функция вызывается в разных местах проекта Такие баги сложно заметить – они не вызывают ошибку, а просто ведут себя «странно».
715
просмотров
1104
символов
Нет
эмодзи
Нет
медиа

Другие посты @phytonrepoz

Все посты канала →
🐍 Изменяемые аргументы по умолчанию – тихий источник багов — @phytonrepoz | PostSniper