Курс 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-dateutil
  2. Структура строк в Python
  3. Работа с комплексными числами
  4. Описание скриптов в README
  5. Повторение элементов списков
  6. PATCH-запрос с библиотекой requests
  7. Создание циклической ссылки
  8. Работа с OpenCV
  9. Удаление дубликатов с помощью множеств
  10. Возврат нескольких значений
  11. Генераторы в Python
  12. Метод __irshift__ для побитового сдвига вправо
  13. Оператор * в Python
  14. Работа с библиотекой xkcd
  15. Функция zip() — объединение последовательностей
  16. Создание графики с черепахой
  17. Сортировка с параметром key
  18. Python: отсутствие точек с запятыми
  19. Управление памятью в numpy.
  20. Операции со строками в Python
  21. Python 3.12: Псевдонимы типов
  22. Работа с WindowsPath()
  23. Хэш-функции в Python
  24. Сортировка с помощью key
  25. Сравнение def и lambda функций в Python
  26. Замер времени выполнения кода
  27. Регистрация на курсы SF Education
  28. Расчет времени выполнения программы
  29. Применение функции к элементам списка
  30. Объединение словарей в Python 3.5+
  31. Создание и использование модулей в Python
  32. Поиск всех индексов подстроки
  33. Создание уникального проекта
  34. Метод __ixor__ для побитового исключающего ИЛИ
  35. Стать Python-разработчиком
  36. Сортировка HTML по CSS-селектору
  37. Хешируемые ключи в Python
  38. Метод join() для объединения элементов в строку.
  39. Python Тесты и Гайды
  40. Передача аргументов в Python
  41. Установка и использование emoji
  42. Контроль точности вывода чисел
  43. Отслеживание прогресса с tqdm
  44. Форматирование кода на Python
  45. Эффективная конкатенация строк с использованием join()
  46. Метод join() для объединения строк
  47. Отступы в Python

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