Курс 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"
- Конкатенация строковых литералов
- Многопроцессорное программирование в Python
- Отправка HTTP-запросов в Python
- Генераторы в Python
- Упрощение работы с JSON-данными в Python
- Работа с модулем random
- Магические методы в Python
- Работа с NumPy
- Метод rsub в Python: расширение функциональности вычитания
- Оптимизация памяти с помощью __slots__
- Создание директории в Python
- Логирование в Python
- Построение графиков в терминале с bashplotlib
- Основные методы NumPy
- Метод __ixor__ для побитового исключающего ИЛИ
- Python Calendar Usage
- Явный импорт переменных
- Классы данных в Python
- Декораторы в Python
- Рекурсия для обращения строки
- Библиотека Emoji: использование смайлов в Python
- Искажение имен в Python
- Приоритет операций в Python
- Получение частей дроби
- Переопределение метода sub
- Хеширование паролей с солью
- Создание таблиц в терминале с PrettyTable
- Метод __float__ в Python
- Экспорт данных в файл.
- Поиск с библиотекой Google
- Pretty-printing JSON в Python
- Оформление кода по PEP 8
- Раздувающийся словарь в Python
- Объединение словарей в Python
- Работа с аргументами командной строки
- Создание новых функций через partial
- Работа с исключениями в Python
- Функции map() и reduce() в Python
- Сортировка данных с лямбда-функциями
- Синхронизация потоков с time.sleep()
- Переименование файлов в Python
- ChainMap избыточные ключи
- Оператор Walrus: правильное использование
- Запуск внешних программ с subprocess
- Управление доступом к модулю
- Использование двоеточия в Python















