Курс 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
- OrderedDict — упорядоченный словарь
- Преобразование чисел в слова
- Beautiful Soup — извлечение данных из HTML
- Замеры производительности в Python
- Вывод с переменной через запятую
- Сортировка в Python
- Деление в Python
- Оператор деления для класса Rational
- Цикл for в Python
- Объединение списков с помощью zip
- Конвертация текстовых чисел с помощью Numerizer
- Работа с комплексными числами
- Декораторы в Python
- Изменение объектов в Python
- Функции any() и all() в Python
- Реализация операции -= для пользовательского класса
- Работа с комплексными числами
- Переменная Шредингера
- Расширение операции побитового «и» в Python
- Оператор «or» в Python
- Возврат значений из генератора
- Изменение элемента списка
- Работа с zip()
- Философия Python
- Защита данных в Python
- Модуль os в Python: работа с файлами
- Python: Фильтрация списков с помощью filter()
- Срезы в Numpy
- Работа с OpenCV
- Генерация чисел с range()
- Извлечение аудио из видео
- Итераторы в Python
- Метод Enumerate() для списков
- Работа с типами данных в Python с помощью pydantic.
- Отправка POST запроса на сервер.
- Создание словаря и множества
- Генераторы данных
- Создание задания в Cron
- Автоматизация скриптов на AWS Lightsail.
- Хеширование паролей с солью
- Pretty-printing JSON в Python
- Добавление элемента к кортежу
- Переворот последовательности
- Метод __getitem__ в Python
- Создание новых списков в Python
- Декораторы в Python
- Символ подчеркивания в Python















