Курс 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. Определение объема памяти объекта
  2. Философия Python
  3. Magic Commands — улучшение работы с Python
  4. Особенности множеств в Python
  5. Логирование в Python
  6. Обход дочерних элементов BeautifulSoup
  7. Сортировка и обратный порядок
  8. Утечки переменных цикла в Python 3.x
  9. Перевод эмодзи и эмотиконов.
  10. Переворот списка в Python
  11. Проверка элементов списка условием
  12. Профилирование данных с Pandas.
  13. Модуль inspect: получение информации о объектах
  14. Разница между датами
  15. JMESPath в Python
  16. Сравнение строк в Python
  17. Функция zip() в Python
  18. Метод is_absolute() для PurePath
  19. Работа с геоданными с помощью geopy
  20. Создание списков в Python
  21. Модуль subprocess: запуск внешних команд
  22. Оператор continue в Python
  23. Работа с IP-адресами в Python
  24. Вызов внешних программ в Python с помощью sh
  25. Удаление эмодзи с помощью pandas
  26. Возврат нескольких значений
  27. Область видимости переменных
  28. Замена текста с re.sub()
  29. Работа с датами в Python
  30. Введение в Python
  31. Импорт объектов из модулей
  32. Курс по дообучению ChatGPT
  33. Ввод нескольких значений
  34. Применение функции к каждому элементу списка
  35. Непрерывная проверка в Python
  36. Основы Python
  37. Функция zip() — объединение последовательностей
  38. Преобразование чисел в Python
  39. Установка Python3.7 и PIP
  40. Реализация метода __abs__ в Python
  41. Проверка условий в Python
  42. Операции с массивами в NumPy
  43. Сортировка с помощью параметра key
  44. Создание списков в Python
  45. Многоточие в Python

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