Курс Python → Избегайте пустого списка

Пустой список нельзя использовать как аргумент по умолчанию в Python из-за того, что значения по умолчанию для аргументов функции вычисляются только один раз, при определении функции. Если вы попытаетесь использовать пустой список в качестве значения по умолчанию для аргумента функции, то он будет создан при определении функции и будет ссылаться на один и тот же объект в памяти каждый раз, когда функция вызывается.

Это означает, что если внутри функции изменяется пустой список, то изменение будет сохранено в этом списке для всех последующих вызовов функции, так как все они будут использовать один и тот же объект списка. Это может привести к неожиданным и нежелательным результатам, так как изменение списка в одном вызове функции может повлиять на другие вызовы, которые рассчитывают на неизменность значения по умолчанию.

Чтобы избежать подобных проблем, рекомендуется использовать в качестве значения по умолчанию неизменяемые объекты, такие как None, числа или строки. Если необходимо использовать изменяемый объект, то лучше создавать его внутри функции, чтобы каждый вызов функции работал с отдельным экземпляром объекта и не влиял на другие вызовы.


def my_function(my_list=None):
    if my_list is None:
        my_list = []
    my_list.append("element")
    print(my_list)

my_function()  # ["element"]
my_function()  # ["element"] (не изменяет значение по умолчанию)

В приведенном примере использовано None как значение по умолчанию для аргумента функции, и внутри функции создается новый пустой список, если аргумент не был передан. Это позволяет избежать проблем с изменяемыми объектами и гарантирует, что каждый вызов функции работает с отдельным списком, не влияя на другие вызовы.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Тип данных TypeVarTuple
  2. Основы работы с базами данных в Python
  3. Векторизация в Python с NumPy.
  4. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  5. Работа с itertools
  6. Область видимости переменных в Python
  7. Атрибуты объекта в Python
  8. Основы Python за 14 дней
  9. Разделение строк в Python
  10. Аргументы *args и **kwargs
  11. Определение размера папок в Python
  12. Взаимодействие с sys
  13. Парсинг веб-страниц с Beautiful Soup
  14. Декораторы для регистрации функций
  15. Замыкания в Python
  16. Подсказки при вводе данных в Python
  17. Принципы SRP и OCP
  18. Условные выражения в Python
  19. Контроль точности вывода чисел
  20. Поиск повторов в списке
  21. lru_cache оптимизация функций
  22. Показ всплывающих окон Tkinter
  23. Проверка существования переменной с оператором :=
  24. Операции с матрицами в Python
  25. Сериализация объектов в Python
  26. JSON-esque в Python
  27. Обработка ошибок в JSON данных
  28. Оператор «моржа» (Walrus Operator)
  29. Запуск Python из интерпретатора
  30. Функции min(), max(), sum()
  31. ChainMap избыточные ключи
  32. Создание файла с проверкой ошибки
  33. Создание и инициализация объектов
  34. Python Enumerate
  35. Namedtuple в Python
  36. Повторение элементов в Python
  37. Оператор del в Python
  38. Очистка списка от False, None, 0, «»
  39. Обработка исключений в Python
  40. Логирование с Loguru
  41. Кортежи в Python: особенности и преимущества
  42. Создание генераторов в Python
  43. Рациональные числа в Python

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