Курс 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. Работа с Enum в Python3.
  3. Подсчет элементов в списке с Counter
  4. Оператор assert в Python
  5. Методы и функции в Python
  6. Проверка ввода с помощью isdigit
  7. Работа с файлами в Python
  8. Функция zip() в Python
  9. Работа с многоуровневыми словарями в Python
  10. Создание списка через цикл
  11. Лямбда-функции в Python
  12. Однострочники Python
  13. Подписка на @SelectelNews
  14. Python Метод sleep() времени
  15. Метод lt для сортировки объектов
  16. Проекты на Python
  17. Работа с кортежами в Python
  18. Перевод текста с Python Translator
  19. Преобразование в float
  20. Создание и операции с дробями
  21. Отделение звука от видео
  22. Работа со строками в Python.
  23. Вычисление натуральных логарифмов в NumPy
  24. Разбиение текста в Python
  25. Избегание изменяемых аргументов
  26. Обработка исключения UnboundLocalError
  27. Получение комбинаций в Python
  28. Конкатенация строковых литералов
  29. Модуль itertools: комбинации и перестановки
  30. Генераторы в Python
  31. Метод rsub для пользовательских чисел
  32. Работа с файловой системой в Python
  33. Реализация метода __abs__ в Python
  34. Объединение словарей в Python
  35. Изучение объектов с помощью dir()
  36. Расчет времени выполнения кода
  37. None в Python: использование и особенности
  38. Python enumerate() использование
  39. Получение идентификатора объекта в памяти
  40. Частичное совпадение пользовательского ввода в Python 3.10
  41. Списковое включение в Python
  42. Метод join() для объединения элементов строки
  43. Работа с CSV файлами
  44. Парсинг веб-страниц с Beautiful Soup
  45. Установка Python — Простое руководство
  46. Сумма элементов списка
  47. Метод title() в Python

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