Курс 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. Хеширование паролей с использованием salt
  2. Работа со строками в Python
  3. Генераторы данных
  4. Структура данных deque в Python
  5. Antigravity модуль
  6. Перехват исключений в Python
  7. Retrying в Python: повторные вызовы
  8. Работа с часовыми поясами в Python
  9. Повторение и перенос строки
  10. Аргументы *args и **kwargs
  11. Асинхронное выполнение задач в Python
  12. Декоратор total_ordering для сравнения объектов
  13. CSV строка разделение в Python
  14. Хешируемые ключи в Python
  15. Функция zip() в Python
  16. Объединение словарей в Python
  17. Метод append() для списка
  18. IPython и Jupyter Notebook: руководство
  19. Вычисление разности множеств в Python
  20. Основы Python
  21. Python enumerate() для работы с индексами
  22. Функции all() и any() в Python
  23. Проекты на Python
  24. Генерация случайных чисел в Python
  25. Переменные класса и экземпляра
  26. Операции со строками в Python
  27. Удаление элементов по срезу
  28. Использование html-скриптов в Jupyter Notebook
  29. Работа с каталогами в Python
  30. Оптимизация строк в Python
  31. Python 3.12: переиспользование кавычек
  32. Python Enumerate
  33. Библиотека Chartify: руководство
  34. Создание вкладок с TKinter
  35. UserList в Python: Описание и примеры использования
  36. Работа с массивами в Numpy
  37. Методы обработки строк в Python
  38. Замеры производительности в Python
  39. Python enumerate() функции
  40. Проверка запуска скрипта или импорта модуля
  41. Функция с **kwargs в Python
  42. Расчет времени выполнения
  43. Распаковка аргументов в Python
  44. ROT13 Шифр Цезаря в Python
  45. Отправка HTTP-запросов в Python
  46. Многоточие в Python

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