Курс Python → Избегайте изменяемых аргументов
Один из распространенных источников ошибок при работе с функциями в Python — это использование изменяемых аргументов по умолчанию. Когда мы определяем функцию с аргументом по умолчанию, который является изменяемым объектом, таким как список или словарь, мы должны быть осторожны. При каждом вызове функции изменяемый аргумент по умолчанию не инициализируется заново, а используется последнее значение, которое было ему присвоено. Это может привести к неожиданным результатам, если мы не учитываем это поведение.
Давайте рассмотрим пример. У нас есть функция some_func, которая принимает аргумент default_arg со значением по умолчанию []. Если мы вызовем эту функцию без явного указания значения для default_arg, то при каждом вызове будет использоваться один и тот же список, который был инициализирован при определении функции. Если мы внутри функции изменим этот список, то он будет сохранен для последующих вызовов функции.
def some_func(arg=default_arg):
arg.append(1)
return arg
print(some_func()) # [1]
print(some_func()) # [1, 1]
Чтобы избежать подобных проблем, рекомендуется использовать неизменяемые объекты в качестве аргументов по умолчанию или создавать новый изменяемый объект внутри функции при каждом вызове. Например, вместо использования списка как аргумента по умолчанию, мы можем использовать None и внутри функции создать новый список, если аргумент не был передан.
Приведенный выше пример демонстрирует важность понимания того, как работают изменяемые аргументы по умолчанию в Python. Избегайте использования изменяемых объектов в качестве аргументов по умолчанию, если вы не уверены, как это поведение может повлиять на ваш код. Будьте внимательны и всегда тестируйте свой код, чтобы избежать неожиданных результатов.
Другие уроки курса "Python"
- Ускорение кода с помощью векторизации
- Установка Home Assistant
- Декораторы в Python
- Создание новой даты в Python
- Расширение операции побитового «и» в Python
- Отправка HTTP-запросов в Python
- Класс Counter() для подсчета элементов
- Проверка элементов списка условием
- Функции в Python
- Метод join() для объединения строк
- Получение срезов итераторов
- Оператор «not» в Python
- Работа с географическими данными в Python
- TypedDict для kwargs в Python 3.12
- Управление экспортом элементов
- Группировка элементов Python
- Хеши в Python
- Создание именованных кортежей в Python
- Очистка данных в Python
- Участие в сообществе @selectel
- UserString в Python
- Тестирование функции сложения
- Итераторы в Python
- Поиск уникальных элементов строкой в Python
- Изменение списка срезами
- Кортежи в Python: особенности и преимущества
- Создание словарей в Python
- Создание словарей с defaultdict
- Работа с эмодзи в Python
- Модуль math: основные функции
- Поиск индексов подстроки
- Работа с timedelta в Python
- Синхронизация потоков с time.sleep()
- Работа с часовыми поясами в Python.
- Создание пользовательской коллекции в Python
- Поиск индекса элемента в списке
- Управление ресурсами с контекстными менеджерами
- Метод add для класса Vector
- Генерация строк с .join()
- Удаление ключа из словаря в Python
- Списковое включение в Python
- Разбиение строки в Python
- Подсчет элементов в Python
- Проверка условий в Python
- Экранирование символов в Python















