Курс 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. Antigravity модуль
  2. Работа со строками в Python
  3. Функция с **kwargs в Python
  4. Шаблоны Flask: условия и циклы
  5. Работа с контекстными менеджерами
  6. Работа с Telegram API на Python
  7. Отладка производительности Python
  8. Встроенные функции Python
  9. Оператор @ для умножения матриц
  10. Метод join() для объединения элементов строки
  11. Проверка строки на палиндром
  12. Numpy: разбиение массивов
  13. Фильтрация последовательности
  14. Метод invert для побитового отрицания
  15. Работа с комплексными числами
  16. Очистка данных с помощью pandas
  17. Работа с модулем cmath
  18. Работа с CSV файлами в Python
  19. Автоматизация с Python
  20. Основные функции и модули Python
  21. Проверка элементов списка условием
  22. Работа с файлами и директориями в Python.
  23. Нахождение самого длинного слова в списке с помощью max
  24. Сортировка с параметром key
  25. Solidity для DeFi Ethereum
  26. Обработка ошибок в Python
  27. Комментарии в Python
  28. Работа с getopt
  29. Перезагрузка оператора в Python
  30. Избегайте ошибку FileNotFoundError
  31. Декораторы в Python
  32. Экранирование символов в Python
  33. Генераторы списков
  34. Оператор match в Python
  35. Pillow: работа с изображениями
  36. Модуль math: основные функции
  37. Поиск элементов BeautifulSoup
  38. Расчет времени выполнения
  39. capitalize() — изменение регистра первого символа строки
  40. Применение функции к списку
  41. Извлечение статей с newspaper3k
  42. Структуры данных в Python
  43. Добавление Progressbar в Python
  44. Выключение компьютера с помощью Python
  45. Concrete Paths в Python
  46. Модуль itertools: комбинации и перестановки

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