Курс 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. Метод ior для битовых операций
  2. Асинхронное выполнение задач в Python
  3. Сериализация данных в JSON с помощью json.dumps
  4. Создание копии итератора
  5. Импорт модулей и пакетов в Python
  6. Фильтрация списка от «ложных» значений
  7. Progress с библиотекой tqdm
  8. Метод __int__ в Python
  9. Реверс строки и списка в Python.
  10. Создание тестовых данных с Faker
  11. Проверка типа данных
  12. Сравнение строк в Python
  13. Сортировка с параметром key
  14. Оптимизация памяти с __slots__
  15. Отношения подклассов в Python
  16. Работа с очередями в Python
  17. Генераторы в Python
  18. Обработка ошибок в Python
  19. Проверка условий: all и any
  20. Переворот строки
  21. Декораторы с аргументами
  22. Виртуальные среды в Python
  23. Логические значения в Python
  24. Извлечение аудио из видео
  25. Определение имен функций
  26. Документирование функций в Python
  27. Структурирование данных с Pydantic
  28. Преобразование букв в нижний регистр
  29. Извлечение данных из JSON
  30. Работа со словарями в Python
  31. Тип данных TypeVarTuple
  32. Названия переменных
  33. Строки в Python: апострофы и кавычки
  34. Объединение словарей в Python
  35. Форматирование строк с % в Python
  36. Операторы Splat и splatty-splat
  37. Импорт с альтернативным именем
  38. Декораторы в Python
  39. Обработка данных в Python
  40. Использование html-скриптов в Jupyter Notebook
  41. Функциональное программирование в Python
  42. Функция product() из itertools
  43. Лямбда-функции в defaultdict
  44. Оператор in и not in в Python
  45. Проверка кортежей.
  46. Перегрузка операторов в Python

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