Курс 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. Объединение списков в Python
  2. Импорт с альтернативным именем
  3. Метод join для наборов
  4. Функция product() из itertools
  5. Цикл for с enumerate() в Python
  6. Удаление ключа из словаря
  7. Defaultdict в Python
  8. Перевернуть список в Python
  9. Активация Matplotlib в Jupyter
  10. Печать месячного календаря
  11. Замена текста в Python
  12. Удаление дубликатов из списка с помощью dict.fromkeys
  13. Оценка точности модели
  14. Метод pop() списка
  15. Оператор «not» в Python
  16. Объединение словарей в Python
  17. Поиск частого элемента
  18. Lambda Functions in Python
  19. Работа с zip-архивами в Python
  20. Транспонирование матрицы в Python
  21. Оператор «not» в Python
  22. Функции в Python
  23. Очистка списка от False, None, 0, «»
  24. Мониторинг памяти с Pympler
  25. Объединение списков с помощью zip
  26. Методы и функции в Python
  27. Создание пользовательской коллекции в Python
  28. Руководство по Pymorphy2
  29. Преобразование в float
  30. Модуль xkcd: добавление юмора в Python
  31. Работа с NumPy массивами
  32. Срез списка в Python
  33. Создание .exe файла с pyinstaller
  34. Замена подстроки
  35. Метод __ilshift__ для битового сдвига влево
  36. Метод join() для объединения элементов
  37. Виртуальное окружение Python
  38. Настройка нарезки списков
  39. Работа с Enum в Python3.
  40. lru_cache оптимизация функций
  41. Генераторы в Python
  42. Профилирование кода на Python
  43. Печать списка с помощью метода join
  44. Преобразование строк в числа в Python
  45. Лимиты на ресурсы Python
  46. Равенство и идентичность в Python
  47. Метод invert для побитового отрицания

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