Курс 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 за 14 дней
  2. Определение относительного пути
  3. Функция eval() в Python
  4. Функция pow() — возвести число в степень
  5. Создание объекта времени
  6. Переопределение метода __rshift__
  7. Работа с NumPy массивами
  8. Округление чисел с помощью round
  9. Отрицательные индексы списков
  10. Управление ресурсами в Python
  11. Философия Python
  12. Измерение времени выполнения кода
  13. Динамические маршруты во Flask
  14. Работа с PosixPath() в Python
  15. Проверка наличия элемента в списке
  16. Запрос пароля с помощью getpass
  17. Фильтрация элементов с помощью islice
  18. Измерение потребления памяти при сортировке
  19. Метод eq для сравнения объектов
  20. GitHub в Telegram: подписка на уведомления
  21. Обмен значений переменных в Python
  22. Названия столбцов в Python таблицах
  23. Циклы for в Python
  24. Таймер обратного отсчета
  25. Работа с итераторами через срезы
  26. Создание уникального множества
  27. Путь к интерпретатору Python
  28. Генератор списка в Python
  29. Параллельные вычисления в Python
  30. Игра «Виселица» на Python
  31. Асинхронное выполнение задач в Python
  32. Лямбда-функции для min/max
  33. Функция map() и ленивая оценка
  34. JSON в Python: модуль, dump, dumps, load
  35. Объединение словарей в Python
  36. Расширение операции побитового «и» в Python
  37. Создание словарей с defaultdict()
  38. Многострочные комментарии в Python
  39. Безопасный доступ к значениям словаря
  40. Lambda Functions in Python
  41. Реверс строки и списка в Python.
  42. UserString в Python
  43. Нахождение разницы между списками в Python
  44. Преобразование чисел в Python

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