Курс 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
  3. Декодирование байтов в строку
  4. Философия Python
  5. Преобразование многоуровневого словаря
  6. Работа с переменными в Python
  7. Декоратор @override
  8. Работа с пакетами
  9. Лямбда-функции в Python
  10. Вычисление времени выполнения
  11. Принципы Zen Python
  12. Работа с необработанными строками
  13. Управление виртуальными средами в Python
  14. Создание словарей и множеств в Python
  15. Параллельные вычисления в Python
  16. capitalize() — изменение регистра первого символа строки
  17. Удаление символов новой строки в Python.
  18. Возвращение нескольких значений
  19. Создание именованных кортежей в Python
  20. Оформление кода на Python
  21. Удаление элементов из списка в Python
  22. Циклы в Python
  23. Создание детектора плагиата
  24. Логические значения в Python
  25. Использование функции product
  26. Глобальные переменные в Python
  27. Кортеж в Python: создание, доступ, изменение
  28. Функции с необязательными аргументами
  29. Добавление элементов в список: append() vs extend()
  30. Метод get для словарей
  31. Упрощенный вывод данных в Python
  32. Форматирование вывода списков
  33. Преобразование текста в речь с Python
  34. Удаление символа из строки
  35. Создание списка через цикл
  36. Многопроцессорное программирование в Python
  37. Рациональные числа в Python
  38. Библиотека wikipedia для Python
  39. Управление контекстом с помощью декоратора contextmanager
  40. Функции all и any в Python
  41. Печать календаря в Python
  42. Работа с массивами в Python
  43. Оператор += для объединения строк
  44. Управление IP-адресами через прокси
  45. Поток данных в Python
  46. Освобождение памяти в Python

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