Курс 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. Атрибуты класса и экземпляра
  4. Поиск индексов в списке
  5. Разделение списка на гнппы
  6. Раздувающийся словарь в Python
  7. Создание списка дат
  8. Эффективная конкатенация строк с использованием join()
  9. Декоратор Ajax required
  10. Метод getitem для доступа к элементам последовательности
  11. Переменные класса и экземпляра
  12. Срез в Python
  13. Функции any() и all() в Python
  14. Резервирование символов в Python
  15. Ускорение выполнения кода в Python
  16. Проверка типа данных
  17. Манипуляция формой массива в Numpy
  18. Объединение кортежей в Python
  19. Удаление ключей из словаря
  20. Функции-генераторы в Python
  21. Основы Python
  22. Библиотека itertools: объединение списков
  23. Секреты Python
  24. Возврат нескольких значений
  25. Атрибуты массивов в Numpy
  26. Объединение списков с помощью zip
  27. Генератор чисел Фибоначчи
  28. Получение ID текущего процесса
  29. Оформление кода по PEP 8
  30. Сравнение def и lambda функций в Python
  31. Метод count в Python: почему count(», ») возвращает 4?
  32. Lambda Functions in Python
  33. Класс UserDict: дополнительная функциональность
  34. Получение размера объекта с sys.getsizeof()
  35. Генерация QR-кодов с Python
  36. Методы shutil для работы с файлами
  37. Python: Фильтрация списков с помощью filter()
  38. Цикл for в Python
  39. Анализ текста на русском языке с помощью Pymystem3
  40. Подсчет элементов с помощью Counter
  41. Инвертирование словаря
  42. Оптимизация памяти в Python
  43. Разделение строки с помощью re.split()
  44. Проблема с изменяемыми аргументами
  45. Принцип одной функции
  46. Возврат нескольких значений из функции

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