Курс 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. Метод index() в Python
  2. Библиотека wikipedia для Python
  3. Работа с изображениями Pillow
  4. Работа с модулем glob в Python
  5. Работа с модулем bisect
  6. Оператор += в Python
  7. enumerate() в Python для работы с индексами
  8. Функция format() в Python
  9. Объединение словарей в Python
  10. Проверка условий: all и any
  11. Создание комплексных чисел
  12. Построение графиков в терминале с bashplotlib
  13. Подсчет частоты элементов с Counter
  14. Основы работы с os
  15. Работа с контекстным менеджером Pool
  16. Удаление файлов в Python
  17. Итерация по копии коллекции
  18. Метод __irshift__ для Python
  19. Обработка исключений с блоком else
  20. Numpy: разбиение массивов
  21. Создание пар из последовательностей
  22. Операции с кортежами
  23. Запуск асинхронной корутины
  24. Распаковка аргументов в Python
  25. Объявление переменных в Python
  26. Сортировка элементов с OrderedDict
  27. Лямбда-функции в defaultdict
  28. Метод lt для сортировки объектов
  29. Метод add для класса Vector
  30. Работа с контекстными менеджерами
  31. Pillow: работа с изображениями
  32. Работа с Colorama
  33. Модуль os: работа с файлами и папками
  34. Объединение списков в строку
  35. Функция findall() для поиска вхождений строки
  36. Функция enumerate в Python
  37. Оператор «not» в Python
  38. Открытие, чтение и закрытие файла
  39. Оператор Walrus: правильное использование
  40. Использование модуля __future__
  41. Вывод с переменной через запятую
  42. Разрешение имен в Python
  43. Обмен данными с asyncio.Queue
  44. Модуль future Python
  45. Транспонирование 2D-массива с помощью zip
  46. Оператор «or» в Python
  47. Работа с YAML в Python
  48. Официальный канал Python в Telegram
  49. Аннотации типов в Python

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