Курс 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. Однострочники Python
  4. Оператор «моржа» (Walrus Operator)
  5. Оператор * в Python
  6. Функция all() в Python
  7. Измерение времени выполнения кода
  8. Оптимизация гиперпараметров в Python
  9. Генераторы в Python
  10. Библиотека sh: удобные команды терминала
  11. Методы __repr__ и __str__ в Python
  12. Красивый вывод списка
  13. Определение наиболее частого элемента с помощью collections.Counter
  14. Подписка на каналы разработчиков
  15. Принципы программирования
  16. Класс-оболочка для словарей
  17. Подчеркивание в REPL
  18. Строковое представление объектов
  19. Возврат нескольких значений
  20. Использование *args
  21. Генераторы списков в Python
  22. Преобразование текста в нижний регистр
  23. Обработка исключений в Python
  24. Параллельные вычисления в Python
  25. Метод get для словаря
  26. Комментарии в Python
  27. Любовь к Python
  28. Вычисление логарифмов в Python
  29. split() без разделителя
  30. Объединение списков в Python
  31. Справка по импортированным модулям
  32. Команда %dhist — список посещенных каталогов
  33. Многоточие в Python
  34. Методы classmethod и staticmethod
  35. Работа с коллекциями Python
  36. Переопределение метода __floordiv__
  37. Распаковка значений в Python
  38. Python reversed() функция
  39. Замер времени выполнения кода
  40. Работа с эмодзи в Python
  41. SciPy: широкий функционал для математических операций
  42. Наиболее частотные элементы с помощью Counter
  43. Метод count() для списка

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