Курс 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. OrderedDict — упорядоченный словарь
  3. Преобразование чисел в слова
  4. Beautiful Soup — извлечение данных из HTML
  5. Замеры производительности в Python
  6. Вывод с переменной через запятую
  7. Сортировка в Python
  8. Деление в Python
  9. Оператор деления для класса Rational
  10. Цикл for в Python
  11. Объединение списков с помощью zip
  12. Конвертация текстовых чисел с помощью Numerizer
  13. Работа с комплексными числами
  14. Декораторы в Python
  15. Изменение объектов в Python
  16. Функции any() и all() в Python
  17. Реализация операции -= для пользовательского класса
  18. Работа с комплексными числами
  19. Переменная Шредингера
  20. Расширение операции побитового «и» в Python
  21. Оператор «or» в Python
  22. Возврат значений из генератора
  23. Изменение элемента списка
  24. Работа с zip()
  25. Философия Python
  26. Защита данных в Python
  27. Модуль os в Python: работа с файлами
  28. Python: Фильтрация списков с помощью filter()
  29. Срезы в Numpy
  30. Работа с OpenCV
  31. Генерация чисел с range()
  32. Извлечение аудио из видео
  33. Итераторы в Python
  34. Метод Enumerate() для списков
  35. Работа с типами данных в Python с помощью pydantic.
  36. Отправка POST запроса на сервер.
  37. Создание словаря и множества
  38. Генераторы данных
  39. Создание задания в Cron
  40. Автоматизация скриптов на AWS Lightsail.
  41. Хеширование паролей с солью
  42. Pretty-printing JSON в Python
  43. Добавление элемента к кортежу
  44. Переворот последовательности
  45. Метод __getitem__ в Python
  46. Создание новых списков в Python
  47. Декораторы в Python
  48. Символ подчеркивания в Python

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