Курс 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
- Оператор break в Python
- Склеивание строк без циклов
- Работа с getopt
- Создание .exe файла с pyinstaller
- Управление сессиями в Python
- Проверка подстроки в строке с помощью in
- Конкатенация строк с методом join()
- Подсчет частоты элементов с Counter
- Отправка POST-запроса в REST API
- Шаблоны Flask: условия и циклы
- Импортирование в Python
- Определение размера папок в Python
- Howdoi — получение ответов из терминала
- Нан-рефлексивность в Python
- Работа с массивами в Numpy
- Конкатенация списков в Python
- Метод repr() в Python
- Функция print() — вывод информации
- Карта бомбоубежищ в Москве и Питере
- Переопределение метода __rshift__
- Импорт с альтернативным именем
- Использование модуля __future__
- Magic Commands — улучшение работы с Python
- Объединение множеств в Python
- Метод gt в Python
- Установка и использование emoji
- Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
- Удаление URL-адресов в Python
- Лямбда-функции в Python
- Подробная информация о %pinfo
- Модуль xkcd: добавление юмора в Python
- Функция sleep() в Python
- Подсчет элементов в Python
- Доступ к локальным переменным
- Шаблоны и наследование в Flask
- Печать календаря в Python
- Гибкие функции Python
- Изменение элемента списка
- Обработка ошибки IndexError
- Работа с процессами в Python
- Сохранение и загрузка модели в PyTorch
- Поиск подстроки в строке
- Атрибуты объекта в Python
- Получение локальных переменных в Python















