Курс 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. Определение имен функций
  3. Переворот списка в Python
  4. Группировка элементов в словарь
  5. Отправка POST-запроса в REST API
  6. Форматирование строк в Python
  7. Изменяемые и неизменяемые объекты
  8. Модуль os в Python: работа с файлами
  9. Работа с модулем glob в Python
  10. Beautiful Soup — извлечение данных из HTML
  11. Профилирование кода на Python
  12. Обработка исключений с блоком else
  13. Функции в одну строку
  14. Объединение словарей в Python
  15. Синхронизация доступа к ресурсам
  16. Хешируемые ключи в Python
  17. Преобразование Excel в PDF с Spire.XLS
  18. Транспонирование 2D-массива с помощью zip
  19. Логирование с Logzero
  20. Возврат нескольких значений
  21. Объединение словарей в Python
  22. Установка и использование Telegram API в Python
  23. Сортировка данных с лямбда-функциями
  24. Список импортированных модулей в Python
  25. Работа с временем в Python
  26. Имена объектов в Python
  27. Блок else в циклах.
  28. Логические значения в Python
  29. Решатель судоку на Python с pygame
  30. Библиотека Rich: форматирование текста
  31. Хранение данных
  32. Отправка POST запроса на сервер.
  33. Работа с модулем os в Python
  34. Изменение переменной в Python: nonlocal
  35. Округление банкира в Python
  36. Закрытие файла в Python
  37. Печать календаря
  38. Преобразование в float
  39. Работа с deque из collections
  40. Удаление эмодзи с помощью pandas
  41. Бесконечная проверка в Python
  42. Лямбда-функции в цикле
  43. Оператор «not» в Python
  44. Взаимодействие с sys
  45. Установка и использование howdoi
  46. Декоратор Ajax required
  47. Выражения-генераторы в Python
  48. Принципы LSP и ISP в Python
  49. Создание объекта времени

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