Курс 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. Управление контекстом с помощью декоратора contextmanager
  2. Исключение NotImplementedError
  3. Объединение словарей в Python
  4. Асинхронное программирование с asyncio
  5. Модуль os в Python: работа с файлами
  6. Избегайте двойного подчеркивания
  7. Проверка типа данных
  8. Применение функции к списку
  9. CLI-инструмент howdoi
  10. Обработка ошибок в JSON данных
  11. Деление в Python
  12. Получение ID текущего процесса
  13. Установка Python — Простое руководство
  14. Многострочные комментарии в Python
  15. Модуль inspect: получение информации о объектах
  16. Работа с zip()
  17. Секреты Python
  18. Сумма элементов списка
  19. Обезопасьте ввод данных
  20. Декораторы в Python
  21. Сравнение объектов в Python
  22. Управление контекстом выполнения
  23. Метод join() для объединения элементов
  24. Множественное наследование в Python
  25. Работа с YAML в Python: PyYAML.
  26. split() — разделение строки
  27. Логирование с Loguru
  28. Оператор умножения для вектора
  29. Многострочные комментарии в Python
  30. Обработка ошибок в Python
  31. Преобразование типов данных в set comprehension
  32. Декораторы в Python
  33. Строки в Python: апострофы и кавычки
  34. Оптимизация строк в Python
  35. Defaultdict в Python
  36. Делегирование в Python
  37. Преобразование Excel в PDF с Spire.XLS
  38. Создание уникального проекта
  39. Сохранение Unicode в JSON
  40. Вложенные функции в Python
  41. Переопределение метода __eq__
  42. Метод setitem в Python
  43. Работа с геоданными с помощью geopy

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