Курс 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. Импорт в Python: список all
  3. Работа с CSV файлами в Python
  4. Переопределение метода __eq__
  5. Обработка исключения UnboundLocalError
  6. Проверка элемента в множестве.
  7. Списки в Python: основы
  8. Структура данных словарь в Python
  9. Ускорение обработки данных с %autoawait
  10. Метод hash в Python
  11. GitHub в Telegram: подписка на уведомления
  12. Создание панели меню Tkinter
  13. Создание объекта timedelta
  14. Замена элементов в списке с помощью генераторов списков
  15. Обработка ошибок ввода данных
  16. Метод __index__ в Python
  17. Оптимизация интернирования строк
  18. Метод join() для объединения элементов строки
  19. Генератор чисел Фибоначчи
  20. Создание виртуальной среды
  21. Объединение словарей в Python
  22. Идентификатор объекта в Python
  23. Профилирование данных с Pandas
  24. Визуализация пропусков данных
  25. Создание графиков в терминале
  26. Подсчет часто встречающихся элементов
  27. Python reversed() функция
  28. Работа с URL-адресами в Python
  29. Работа с SQLite в Python
  30. Построение графиков в терминале с bashplotlib
  31. Регистрация на хакатоне
  32. Подсчет вхождений элементов
  33. Функция findall() для поиска вхождений строки
  34. Генерация фальшивых данных с Faker
  35. Numpy: использование Ellipsis
  36. Применение функций в Python
  37. Метод setdefault() в Python
  38. Атрибуты класса и экземпляра в Python
  39. Проверка подстроки в строке
  40. Инверсия списка/строки в Python
  41. Многопоточность в Python

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