Курс Python → Значения по умолчанию в Python

Значения по умолчанию в Python разделяются между объектами из-за того, что они создаются лишь однажды при определении функции. Это означает, что если значение по умолчанию является изменяемым объектом, таким как словарь, то все последующие вызовы функции будут использовать изменённый объект. Например, если у нас есть функция, которая принимает словарь в качестве значения по умолчанию, и мы изменяем этот словарь в одном вызове функции, то изменения будут сохранены для всех последующих вызовов.

С другой стороны, неизменяемые объекты, такие как числа, строки, кортежи и None, безопасны при изменении, так как они не могут быть изменены после создания. Поэтому значения по умолчанию, которые являются неизменяемыми объектами, будут оставаться неизменными для всех вызовов функции. Например, если значение по умолчанию — это число или строка, то оно не будет изменяться даже при изменении внутри функции.

Изменение изменяемых объектов, таких как словари, списки и экземпляры пользовательских классов, может привести к неожиданным последствиям. Поэтому при определении функций с изменяемыми значениями по умолчанию необходимо быть осторожным и учитывать, что изменения этих объектов будут видны для всех последующих вызовов функции.


def example_function(some_dict={}):
    some_dict['key'] = 'value'
    return some_dict

print(example_function())  # {'key': 'value'}
print(example_function())  # {'key': 'value'}

В данном примере функция example_function принимает словарь в качестве значения по умолчанию и добавляет в него пару ключ-значение. При вызове функции дважды мы видим, что изменения, внесенные в словарь, сохраняются для всех вызовов. Это происходит из-за того, что значение по умолчанию (пустой словарь) создается только один раз при определении функции и используется для всех вызовов.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Импорт с альтернативным именем
  2. Замена атрибута в именованном кортеже
  3. Логирование с Loguru
  4. Методы и функции в Python
  5. Обмен данными с asyncio.Queue
  6. Оператор in в Python
  7. Работа с *args и **kwargs в Python
  8. Оформление кода по PEP 8
  9. Создание и использование модулей в Python
  10. Открытие и запись файлов
  11. Работа с необработанными строками
  12. Проектирование Singleton с метаклассом
  13. Названия столбцов в Python таблицах
  14. Метод ifloordiv для пользовательских классов
  15. Разделение строк в Python
  16. Создание коллекций из генератора
  17. Поиск наиболее частого элемента в списке
  18. Удаление специальных символов с помощью re.sub
  19. Управление контекстом с помощью декоратора contextmanager
  20. Роль запятой в Python
  21. Фильтрация входных данных в Python
  22. Работа со слайсами
  23. Объединение словарей в Python 3.5+
  24. Удаление ссылок в Python
  25. Работа с zip-архивами в Python
  26. Расчет времени выполнения кода
  27. Генераторы списков
  28. Метод split() в Python
  29. Копирование и вставка текста в Python
  30. Избегайте ошибку FileNotFoundError
  31. Логические значения в Python
  32. Метод init в Python
  33. Улучшенные подсказки для импорта в Python 3.12
  34. Разработка игры Pong с turtle
  35. Сортировка в Python
  36. Структура данных словарь в Python
  37. Проверка существования переменной с оператором :=
  38. Асинхронный код в Python
  39. Работа с модулем bisect
  40. Подсчет частотности элементов в Python
  41. Приоритет операций в Python
  42. Списковое включение в Python

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