Курс 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. Логические операторы в Python
  3. Оптимизация создания строк
  4. Статическая типизация в Python
  5. Поиск индекса элемента в списке
  6. Кортежи в Python: особенности и преимущества
  7. Оператор continue в Python
  8. Функция enumerate в Python
  9. Подписка на SelectelNews в Twitter
  10. Аннотации типов в Python
  11. Вычисление натуральных логарифмов в NumPy
  12. Выражения-генераторы в Python
  13. Работа с zip()
  14. Работа с набором данных CIFAR10 в PyTorch
  15. Класс-оболочка для словарей
  16. Удаление дубликатов с помощью множеств
  17. Работа с timedelta в Python
  18. Обмен значений переменных в Python
  19. Метод difference_update() — разность множеств
  20. Перезагрузка оператора в Python
  21. Генераторные функции в Python
  22. Отслеживание выполнения программы с библиотекой tqdm
  23. Генерация случайных чисел в Python
  24. Создание namedtuple списком полей
  25. Методы split() и join() — Python строк.
  26. Форматирование данных с помощью pprint
  27. Работа с GitHub в Telegram
  28. Обработка ошибок в Python
  29. Итераторы в Python
  30. Форматирование строк в Python
  31. Удаление элемента из списка в Python
  32. Приоритет операций в Python
  33. Декораторы в Python
  34. Методы работы со строками в Python
  35. Метод __getitem__ в Python
  36. Метод __iand__ для пользовательских классов
  37. Гибкие функции Python
  38. Встраивание HTML в Jupyter Notebook
  39. Работа с парами ключ-значение
  40. Реализация метода __abs__ в Python
  41. Профилирование кода
  42. Печать списка с помощью метода join
  43. Метод split() в Python
  44. Функции классификации комплексных чисел
  45. Метод pos в Python
  46. Управление доступом к модулю

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