Курс 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. kwargs в Python
  2. Распаковка значений в Python
  3. Условные выражения в Python
  4. Monkey Patching в Python
  5. Хранение данных
  6. Блок try…finally в Python
  7. Декоратор проверки активности
  8. Применение функции к списку
  9. Тестирование с responses
  10. Анонимные функции в Python
  11. Метод сравнения объектов в Python
  12. Проверка подстроки в строке с помощью in
  13. Создание .exe файла с pyinstaller
  14. Итераторы с потерямиZIP
  15. Множественное назначение в Python
  16. Progress с библиотекой tqdm
  17. Метод rsub для пользовательских чисел
  18. Управление браузером с Selenium
  19. Concrete Paths в Python
  20. Удаление URL-адресов в Python
  21. Непрерывная проверка в Python
  22. Блок else в циклах Python
  23. Импортирование в Python
  24. Удаление дубликатов из списка
  25. Пропуск строк в файле с itertools
  26. Функции all() и any() в Python
  27. Удаление элемента из списка в Python
  28. Возвращение нескольких значений
  29. Преобразование документов в PDF с помощью Spire.Office
  30. Объединение списков в Python
  31. Циклы в Python
  32. Работа с URL-адресами в Python
  33. Модуль Operator в Python
  34. Работа с срезами в Numpy
  35. Работа с модулем cmath
  36. Просмотр атрибутов и методов класса
  37. split() — разделение строки
  38. Python UserString — создание подклассов строк
  39. Функция print() — вывод информации
  40. Метод join() для объединения элементов строки
  41. Проверка запуска скрипта или импорта модуля
  42. Отправка HTTP-запросов в Python
  43. Методы в Python
  44. Роль запятой в Python
  45. Автоматизация скриптов на AWS Lightsail.
  46. Вывод с переменной через запятую

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