Курс 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. Проверка на истинность объектов в Python
  3. Делегирование в Python
  4. Декораторы в Python
  5. Проверка надежности пароля на Python
  6. Оператор «not» в Python
  7. Работа с YAML в Python
  8. Срез в Python
  9. Создание Radio кнопок в tkinter
  10. Перебор элементов списка в Python
  11. Работа с модулем cmath
  12. Срез списка в Python
  13. Сравнение строк в Python
  14. Оператор «is not» в Python
  15. Работа с типами данных в Python с помощью pydantic.
  16. Пустой оператор pass в Python
  17. Создание новых списков
  18. Избегайте изменяемых аргументов
  19. Метод сравнения объектов в Python
  20. Эффективная конкатенация строк в Python
  21. Сравнение def и lambda функций в Python
  22. Возврат нескольких значений из функции
  23. Фильтрация последовательности
  24. Поиск всех индексов подстроки
  25. Метод repr() в Python
  26. capitalize() — изменение регистра первого символа строки
  27. Методы list в Python
  28. Оператор «or» в Python
  29. Сумма элементов списка
  30. Работа с байтовыми строками в Python
  31. Поиск анаграмм с Counter
  32. Разработка игры Pong с turtle
  33. Заказ карты Тинькофф Black
  34. Оператор «моржа» (Walrus Operator)
  35. Обработка StopIteration в Python
  36. Форматирование даты с strftime()
  37. HTTP-запросы с библиотекой Requests
  38. Класс-оболочка для словарей
  39. Нахождение отличий в списках
  40. Присоединение элементов коллекции
  41. Удаление дубликатов из списка
  42. Многострочные комментарии в Python
  43. Управление доступом к модулю
  44. Создание OrderedDict
  45. Преобразование символов в нижний регистр
  46. Измерение времени выполнения кода
  47. Непрерывная проверка в Python

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