Курс 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. Получение размера объекта с sys.getsizeof()
  2. Объединение словарей в Python
  3. Модуль xkcd: добавление юмора в Python
  4. Списковый компрехеншен.
  5. Форматирование строк в Python
  6. Сравнение объектов в Python
  7. Извлечение аудио из видео
  8. Многострочные комментарии в Python
  9. Форматирование строк с % в Python
  10. Поиск частого элемента
  11. Работа с изображениями PIL
  12. Считывание бинарного файла в Python
  13. Magic Commands — улучшение работы с Python
  14. Метод title() в Python
  15. Генерация тестовых данных с factory_boy
  16. Метод join() с набором
  17. Метод bool() в Python
  18. Создание списков в Python
  19. Python enumerate() для работы с индексами
  20. Метод __iand__ для пользовательских классов
  21. Работа с классами данных
  22. Работа с deque из collections
  23. Замена подстроки
  24. Оператор += в Python
  25. Методы split() и join() — Python строк.
  26. Загрузка постов Instagram
  27. Python Аргументы по умолчанию
  28. Дефолтные параметры в Python
  29. Логирование с Logzero
  30. Работа с NumPy
  31. Сортировка с параметром key
  32. Python и Юникод: работа с цифрами
  33. Конвертация коллекций в Python.
  34. Условные выражения в Python
  35. Анонимные функции Lambda
  36. Работа с аргументами командной строки в Python
  37. Работа с процессами в Python
  38. Работа с файлами в Python
  39. capitalize() — изменение регистра первого символа строки
  40. Установка и использование модуля Wikipedia
  41. Многострочные строки в Python
  42. Асинхронное выполнение задач в процессах
  43. Аннотации типов в Python
  44. Работа с zip()
  45. Обход элементов в Python
  46. Атрибуты класса и экземпляра
  47. Использование модуля math

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