Курс 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"

  1. Генерация фальшивых данных с Faker
  2. Оператор zip в Python
  3. f-строки в формате строк
  4. Работа с дробями в Python
  5. Создание класса в Python
  6. Построение графиков в терминале с bashplotlib
  7. Создание панели меню Tkinter
  8. Работа с очередями в Python
  9. Объединение списков с использованием itertools.chain
  10. Разделение списка на гнппы
  11. Операторы увеличения и уменьшения в Python
  12. Генераторы в Python
  13. Методы HTTP запросов в Flask
  14. Передача неизвестных аргументов в Python.
  15. Генерация резюме в Gensim
  16. Форматирование строк с f-строками
  17. Python: цикл for и оператор присваивания
  18. Проверка подстроки в строке
  19. Обработка ошибок в JSON данных
  20. Проверка списка: any() и all()
  21. Удаление элементов из списка в Python
  22. Подписка на каналы разработчиков
  23. Перегрузка операторов в Python
  24. Создание и операции с дробями
  25. Метод remove() для удаления элемента из списка
  26. Принципы SRP и OCP
  27. Форматирование строк в Python
  28. Создание директории в Python
  29. Условные выражения в Python
  30. Работа с массивами в Python
  31. Создание виртуальной среды
  32. Удаление файлов в Python
  33. Ускорение обработки данных с %autoawait
  34. Динамические маршруты во Flask
  35. Удаление дубликатов из списка с помощью dict.fromkeys
  36. Класс Counter() для подсчета элементов
  37. Профилирование кода на Python
  38. Множественные конструкторы в Python
  39. Работа с f-строками 2.0
  40. Логирование в Python
  41. Метод getitem для доступа к элементам последовательности
  42. Python-dateutil — работа с датами
  43. Основные методы NumPy

Marketello читают маркетологи из крутых компаний