Курс 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. Замыкания в Python
  2. Получение идентификатора объекта в памяти
  3. Работа с срезами в Numpy
  4. Экспорт данных в файл.
  5. Конвертация коллекций в Python.
  6. Проверка типов с использованием isinstance
  7. Основы Python за 14 дней
  8. Прокачанный трейсинг ошибок
  9. Метод join() для объединения элементов строки
  10. Перемешивание списка с shuffle()
  11. Вычисление логарифмов в Python
  12. Пустой оператор pass в Python
  13. Атрибуты класса и экземпляра
  14. Проверка элемента в множестве.
  15. Распаковка значений в Python
  16. Измерение времени выполнения кода в Python
  17. ChainMap избыточные ключи
  18. Создание словарей и множеств в Python.
  19. Распаковка с оператором *
  20. Mad Libs Generator
  21. Метод title() в Python
  22. Сортировка в Python
  23. Упрощенный вывод данных в Python
  24. Модуль math: основные функции
  25. Создание задания в Cron
  26. Форматирование заголовков в Python
  27. Получение срезов итераторов
  28. Логирование с Logzero
  29. Работа со временем в Python
  30. Вызов внешних программ в Python с помощью sh
  31. Перевод текста с Python Translator
  32. Частичное совпадение ввода
  33. Отступы в Python
  34. Классы данных в Python
  35. Проверка кортежей.
  36. Создание матрицы в Python
  37. Операции с кортежами
  38. discard() — удаление элемента из множества
  39. Получение атрибутов и методов класса
  40. Работа с многоуровневыми словарями в Python
  41. Тестирование функции сложения
  42. Срез списка в Python
  43. Базовые объекты Python
  44. Метод get() для словарей
  45. Установка и загрузка Instaloader
  46. Оптимизация гиперпараметров с Scikit Optimize

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