Курс 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. Конкатенация строковых литералов
  2. Многопроцессорное программирование в Python
  3. Отправка HTTP-запросов в Python
  4. Генераторы в Python
  5. Упрощение работы с JSON-данными в Python
  6. Работа с модулем random
  7. Магические методы в Python
  8. Работа с NumPy
  9. Метод rsub в Python: расширение функциональности вычитания
  10. Оптимизация памяти с помощью __slots__
  11. Создание директории в Python
  12. Логирование в Python
  13. Построение графиков в терминале с bashplotlib
  14. Основные методы NumPy
  15. Метод __ixor__ для побитового исключающего ИЛИ
  16. Python Calendar Usage
  17. Явный импорт переменных
  18. Классы данных в Python
  19. Декораторы в Python
  20. Рекурсия для обращения строки
  21. Библиотека Emoji: использование смайлов в Python
  22. Искажение имен в Python
  23. Приоритет операций в Python
  24. Получение частей дроби
  25. Переопределение метода sub
  26. Хеширование паролей с солью
  27. Создание таблиц в терминале с PrettyTable
  28. Метод __float__ в Python
  29. Экспорт данных в файл.
  30. Поиск с библиотекой Google
  31. Pretty-printing JSON в Python
  32. Оформление кода по PEP 8
  33. Раздувающийся словарь в Python
  34. Объединение словарей в Python
  35. Работа с аргументами командной строки
  36. Создание новых функций через partial
  37. Работа с исключениями в Python
  38. Функции map() и reduce() в Python
  39. Сортировка данных с лямбда-функциями
  40. Синхронизация потоков с time.sleep()
  41. Переименование файлов в Python
  42. ChainMap избыточные ключи
  43. Оператор Walrus: правильное использование
  44. Запуск внешних программ с subprocess
  45. Управление доступом к модулю
  46. Использование двоеточия в Python

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