Курс 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. Проверка на палиндром
  3. Назначение максимального и минимального значения переменной в Python.
  4. Функция reduce() в Python
  5. Шаблоны Flask: условия и циклы
  6. Возведение в квадрат с помощью itertools
  7. Работа с базами данных SQLite
  8. Обработка ошибок в Python
  9. Мощь вложенных функций в Python
  10. Сортировка в Python
  11. Метод __getitem__ в Python
  12. Стать Python-разработчиком
  13. История Python
  14. Создание функций высшего порядка
  15. Поиск кода
  16. Подсчет элементов в списке с Counter
  17. Ошибка NotImplemented в Python
  18. Измерение времени выполнения кода
  19. Пропуск начальных строк с помощью dropwhile()
  20. Удаление элементов во время итерации
  21. Concrete Paths в Python
  22. GitHub в Telegram: подписка на уведомления
  23. Установка и использование Logzero
  24. Перегрузка операторов в Python
  25. Проверка дубликатов в Python
  26. Работа с датой и временем в Python
  27. Генерация QR-кодов с библиотекой qrcode
  28. Фильтрация данных в Python.
  29. Обход словаря в Python
  30. Получение пути к текущему скрипту с помощью os
  31. Методы в Python
  32. Удаление дубликатов с помощью множеств
  33. Удаление элемента по индексу в Python
  34. Моржовый оператор в Python 3.8
  35. Использование обратной косой черты в f-строках
  36. Сравнение строк в Python
  37. Циклы for в Python
  38. Автоматизация скриптов на AWS Lightsail.
  39. Разделение строки с помощью re.split()
  40. Перевод текста с Python Translator
  41. Утечки переменных цикла в Python 3.x
  42. Форматирование строк с помощью f-строк
  43. Модуль array: создание и использование массивов
  44. Метод ifloordiv для пользовательских классов
  45. Переменная с нижним подчеркиванием

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