Курс 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. Обход элементов в Python
  3. Функция enumerate в Python
  4. Создание тестовых данных с Faker
  5. Декораторы в Python
  6. Numpy: использование Ellipsis
  7. Принципы Zen Python
  8. Генераторы в Python
  9. Генераторы в Python
  10. Генераторы в Python
  11. Настройка Cron
  12. Преобразование кортежа в словарь.
  13. Поиск подстроки в строке
  14. Работа с множествами в Python
  15. Проверка подстроки в строке с помощью in
  16. Библиотека itertools: объединение списков
  17. Генераторы в Python
  18. Срез списка в Python
  19. Оптимизация интернирования строк
  20. Удаление дубликатов в pandas
  21. Использование подчеркивания в REPL
  22. Именование переменных в Python
  23. List Comprehension Tutorial
  24. Изменение списка срезом
  25. Удаление элементов во время итерации
  26. Метод rmatmul для обратного матричного умножения
  27. Различия символов в Python
  28. Применение функции map() в Python
  29. Искажение имен в Python
  30. Модуль subprocess: запуск внешних команд
  31. Создание коллекций из генератора
  32. Метод init в Python
  33. Функции с необязательными аргументами
  34. Замена переменных в Python
  35. Списки в Python: основы
  36. Python groupby() из itertools: работа с повторяющимися элементами
  37. Переопределение метода __and__
  38. Проверка окончания строки с помощью str.endswith()
  39. Имена объектов в Python
  40. Работа с классами данных
  41. Непрерывная проверка в Python
  42. Создание и обучение модели с Keras
  43. Проверка версии Python
  44. Ускорение обработки данных с %autoawait
  45. Измерение времени выполнения кода

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