Курс Python → Проблема с изменяемыми аргументами

При написании функций в Python, одной из распространенных проблем является использование изменяемых типов данных в качестве аргументов по умолчанию. Это может привести к непредвиденным результатам, так как Python вычисляет значения по умолчанию для изменяемых типов только один раз — при создании функции. При последующих вызовах функции значение по умолчанию уже будет инициализировано и не будет изменяться.

Это означает, что если в функции вы используете изменяемый тип данных, например список или словарь, в качестве значения по умолчанию для аргумента, то при каждом последующем вызове функции это значение будет уже изменено и не будет соответствовать ожидаемому поведению.

Для избежания подобных проблем важно помнить, что при использовании изменяемых типов данных в аргументах по умолчанию, лучше инициализировать их внутри функции, а не при объявлении самой функции. Таким образом, каждый раз при вызове функции будет создаваться новый объект изменяемого типа данных и не будет конфликтов с предыдущими значениями.


def example_function(my_list=[]):
    my_list.append(1)
    return my_list

print(example_function()) # [1]
print(example_function()) # [1, 1]

В данном примере функция example_function использует список в качестве аргумента по умолчанию. При первом вызове функции список будет содержать один элемент [1]. Однако, при последующем вызове функции, список уже будет содержать два элемента [1, 1], так как значение по умолчанию изменилось после первого вызова.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Создание обратного итератора
  2. Изменения в обработке логических значений
  3. Функция format() в Python
  4. Основные операции с Numpy
  5. Базовые объекты Python
  6. Декораторы в Python
  7. Локальные переменные.
  8. Условные выражения в Python
  9. Отображение графиков в Jupyter с Matplotlib
  10. История Python
  11. Основы работы со строками в Python
  12. Функции map, filter и reduce
  13. Особенности ключей словаря в Python
  14. Генерация UUID в Python
  15. Combobox в Tkinter
  16. Декораторы в Python
  17. Преобразование Excel в PDF с Spire.XLS
  18. Оператор assert в Python
  19. Декораторы в Python
  20. Распаковка аргументов в Python
  21. Создание пользовательской коллекции в Python
  22. Резервирование символов в Python
  23. Поиск HTML-элементов с BeautifulSoup
  24. Группы исключений в Python
  25. Получение пути к текущему скрипту с помощью os
  26. Роль запятой в Python
  27. Работа с PosixPath() в Python
  28. Отрицательные индексы списков
  29. Необязательные аргументы в Python
  30. Множественные конструкторы в Python
  31. Оператор walrus в Python
  32. Работа со списками
  33. Отладка кода
  34. Python OrderedDict и fromkeys() — работа с словарями
  35. Генераторы в Python
  36. discard() — удаление элемента из множества
  37. Получение списка файлов в директории с использованием os
  38. ChainMap избыточные ключи
  39. Метод count в Python: почему count(», ») возвращает 4?
  40. Переворот списка в Python
  41. Объединение списков в Python.
  42. Векторизация в Python с NumPy.
  43. Улучшение читаемости кода в Python
  44. Рекурсия для обращения строки
  45. Инверсия списка и строки

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