Курс 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"
- Получение размера объекта с sys.getsizeof()
- Объединение словарей в Python
- Модуль xkcd: добавление юмора в Python
- Списковый компрехеншен.
- Форматирование строк в Python
- Сравнение объектов в Python
- Извлечение аудио из видео
- Многострочные комментарии в Python
- Форматирование строк с % в Python
- Поиск частого элемента
- Работа с изображениями PIL
- Считывание бинарного файла в Python
- Magic Commands — улучшение работы с Python
- Метод title() в Python
- Генерация тестовых данных с factory_boy
- Метод join() с набором
- Метод bool() в Python
- Создание списков в Python
- Python enumerate() для работы с индексами
- Метод __iand__ для пользовательских классов
- Работа с классами данных
- Работа с deque из collections
- Замена подстроки
- Оператор += в Python
- Методы split() и join() — Python строк.
- Загрузка постов Instagram
- Python Аргументы по умолчанию
- Дефолтные параметры в Python
- Логирование с Logzero
- Работа с NumPy
- Сортировка с параметром key
- Python и Юникод: работа с цифрами
- Конвертация коллекций в Python.
- Условные выражения в Python
- Анонимные функции Lambda
- Работа с аргументами командной строки в Python
- Работа с процессами в Python
- Работа с файлами в Python
- capitalize() — изменение регистра первого символа строки
- Установка и использование модуля Wikipedia
- Многострочные строки в Python
- Асинхронное выполнение задач в процессах
- Аннотации типов в Python
- Работа с zip()
- Обход элементов в Python
- Атрибуты класса и экземпляра
- Использование модуля math















