Курс 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. Атрибуты массивов в Numpy
  2. Функции с необязательными аргументами
  3. Иерархия классов в Python
  4. Работа с NumPy
  5. Работа с GitHub в Telegram
  6. Различия символов в Python
  7. Сравнение строк в Python
  8. Поиск шаблона в начале строки
  9. Подсказки типов в Python
  10. Декоратор @override
  11. HTTP-запросы с библиотекой Requests
  12. Работа с изменяемыми коллекциями
  13. Удаление символов новой строки в Python.
  14. Python: отсутствие точек с запятыми
  15. Список и кортеж в Python
  16. Разница между датами
  17. Работа со словарями Python
  18. Перемешивание списка с shuffle()
  19. Работа с итераторами через срезы
  20. Многострочные комментарии в Python
  21. Разность множеств
  22. Метод split() для разделения строк
  23. Работа с модулем cmath
  24. Работа с OpenCV
  25. Блок else в циклах Python
  26. Работа с timedelta в Python
  27. Рациональные числа в Python
  28. Поиск наиболее частого элемента в списке
  29. Функция print() — вывод информации
  30. Получение текущей даты в Python
  31. Обработка ошибок ввода данных
  32. Вывод букв строки в Python
  33. Оператор «not» в Python
  34. Справка по импортированным модулям
  35. Гибкие функции Python
  36. Обработка исключений в Python
  37. Методы HTTP запросов в Flask
  38. Сравнение неупорядоченных списков
  39. Деление в Python
  40. Преобразование строк в числа в Python
  41. Расчет времени выполнения кода
  42. Потоковый ввод в Python
  43. Проверка на палиндром
  44. Преобразование в float

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