Курс 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. Блок try…finally в Python
  2. Конкатенация строк в Python
  3. Аргументы *args и **kwargs
  4. Создание комплексных чисел
  5. Переменные класса и экземпляра
  6. Обработка исключений в Python
  7. Оператор Walrus: правильное использование
  8. Удаление элементов во время итерации
  9. Метод get для словарей
  10. Поиск анаграмм с Counter
  11. Замена символов в Python
  12. Lambda-функция в Python: использование с map() и sum()
  13. Вызов функций по строке в Python.
  14. Работа с типами данных в Python с помощью pydantic.
  15. Python: изменяемые и неизменяемые коллекции
  16. Умножение строк и списков
  17. Функция map() и ленивая оценка
  18. Функция sleep() в Python
  19. Работа с YAML в Python: PyYAML.
  20. Сортировка в Python
  21. Определение основы слова с showballstemmer
  22. Автоматизация с Python
  23. Создание новой даты в Python
  24. Декораторы в Python
  25. Перевернуть список в Python
  26. Удаление символа из строки
  27. Создание и обучение модели с Keras
  28. Подсчет элементов в Python
  29. Курсы Яндекс Практикум
  30. Сравнение def и lambda функций в Python
  31. Многопроцессорное программирование в Python
  32. Удаление элемента из списка
  33. Обработка исключений
  34. Группировка элементов в словарь
  35. Область видимости переменных
  36. Установка и обучение ChatterBot
  37. Определение функций с необязательными аргументами
  38. Порядок и длина множеств в Python
  39. Создание детектора плагиата
  40. Таймер обратного отсчета
  41. Оптимизация памяти с __slots__
  42. Отладка регулярных выражений в Python
  43. Векторизация в Python с NumPy.
  44. Печать календаря
  45. Сортировка с помощью параметра key
  46. Игра Виселица на Python
  47. Измерение времени выполнения кода с помощью time
  48. Установка библиотек в Python

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