Курс 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. Работа с getopt
  2. Функция enumerate в Python
  3. Оценка выражений генератора в Python
  4. Объединение итераторов
  5. Progress с библиотекой tqdm
  6. Модуль antigravity: генерация координат
  7. Измерение времени выполнения кода
  8. Colorama: окрашивание текста в Python
  9. Работа с атрибутом dict
  10. Чтение и запись TOML-конфигов
  11. Поток данных в Python
  12. Освобождение памяти в Python
  13. Работа с временем в Python
  14. Распаковка аргументов в Python
  15. split() без разделителя
  16. ChainMap.new_child() — добавление нового словаря
  17. Настройка шрифта и цвета в Tkinter
  18. Подсчет элементов в Python
  19. Создание итератора
  20. Оператор обр. импликации
  21. Создание задания в Cron
  22. Python и Монти Пайтон
  23. Автоматизация действий с Pyautogui
  24. Функции min(), max(), sum()
  25. Декораторы в Python
  26. Измерение времени выполнения кода в Python
  27. Работа со списками
  28. Обработка исключений в Python
  29. Создание виртуальной среды
  30. Работа с буфером обмена на Python
  31. Оптимизация интернирования строк
  32. Форматирование данных с pprint
  33. Транспонирование 2D-массива с помощью zip
  34. Хэш-функции и метод цепочек
  35. Вложенные генераторы в Python
  36. Создание комплексных чисел
  37. Установка и использование Python-dateutil
  38. Создание генераторов в Python
  39. Метод count в Python: почему count(», ») возвращает 4?
  40. Модуль xkcd: загрузка комиксов
  41. Модуль subprocess: запуск внешних команд
  42. Проблемы с именами переменных
  43. Метод pos в Python
  44. Выход из профиля в Django
  45. Проверка дубликатов в Python
  46. Введение в Python
  47. Объединение словарей в Python
  48. Преобразование в float

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