Курс 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. Работа с путями в Python
  2. Оператор break в Python
  3. Склеивание строк без циклов
  4. Работа с getopt
  5. Создание .exe файла с pyinstaller
  6. Управление сессиями в Python
  7. Проверка подстроки в строке с помощью in
  8. Конкатенация строк с методом join()
  9. Подсчет частоты элементов с Counter
  10. Отправка POST-запроса в REST API
  11. Шаблоны Flask: условия и циклы
  12. Импортирование в Python
  13. Определение размера папок в Python
  14. Howdoi — получение ответов из терминала
  15. Нан-рефлексивность в Python
  16. Работа с массивами в Numpy
  17. Конкатенация списков в Python
  18. Метод repr() в Python
  19. Функция print() — вывод информации
  20. Карта бомбоубежищ в Москве и Питере
  21. Переопределение метода __rshift__
  22. Импорт с альтернативным именем
  23. Использование модуля __future__
  24. Magic Commands — улучшение работы с Python
  25. Объединение множеств в Python
  26. Метод gt в Python
  27. Установка и использование emoji
  28. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  29. Удаление URL-адресов в Python
  30. Лямбда-функции в Python
  31. Подробная информация о %pinfo
  32. Модуль xkcd: добавление юмора в Python
  33. Функция sleep() в Python
  34. Подсчет элементов в Python
  35. Доступ к локальным переменным
  36. Шаблоны и наследование в Flask
  37. Печать календаря в Python
  38. Гибкие функции Python
  39. Изменение элемента списка
  40. Обработка ошибки IndexError
  41. Работа с процессами в Python
  42. Сохранение и загрузка модели в PyTorch
  43. Поиск подстроки в строке
  44. Атрибуты объекта в Python
  45. Получение локальных переменных в Python

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