Курс 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. Повторение и перенос строки
  2. Enum в Python
  3. Преобразование текста в нижний регистр
  4. Копирование списков в Python
  5. Создание словарей и множеств в Python.
  6. Игра «Виселица» на Python
  7. Оператор Walrus: правильное использование
  8. Безопасный доступ к значениям словаря
  9. Декораторы в Python
  10. Множественное присваивание в Python
  11. Запуск внешнего кода в Jupyter
  12. Замена символов в Python
  13. Замена атрибута в именованном кортеже
  14. Создание итерируемых объектов
  15. Метод remove() для удаления элемента из списка
  16. Проверка памяти объекта
  17. Counter() — подсчет элементов
  18. Создание новых функций с помощью functools.partial
  19. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  20. Копирование в Python
  21. Обработка элементов в Python
  22. Вывод с переменной через запятую
  23. Уникальность ключей в словаре
  24. Динамическая типизация в Python
  25. Логирование в Python
  26. Генерация случайных данных в NumPy
  27. Работа с zip-архивами в Python
  28. Поиск частых элементов в списке
  29. Декораторы в Python
  30. Очистка данных в Python
  31. Получение размера объекта с sys.getsizeof()
  32. Автоматизация с Python
  33. Декораторы в Python
  34. Измерение времени выполнения с помощью time
  35. Преобразование списков в словарь
  36. Возвращение нескольких значений
  37. GitHub в Telegram: подписка на уведомления
  38. Реверс строки в Python
  39. Необязательные аргументы в Python
  40. Работа с argparse
  41. Python и Монти Пайтон
  42. Оператор обр. импликации
  43. Работа с типами данных в Python с помощью pydantic.
  44. Работа с itertools
  45. Манипуляция формой массива в Numpy
  46. Возвращение нескольких значений через кортеж или класс

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