Курс 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. Создание словарей с defaultdict()
  2. Использование функции enumerate()
  3. Работа со словарями с defaultdict из collections
  4. Переопределение метода __pow__
  5. Python groupby() из itertools: работа с повторяющимися элементами
  6. Метод Enumerate() для списков
  7. Расчет времени выполнения
  8. Преобразование чисел в слова
  9. Создание словарей и множеств в Python.
  10. Доступ к локальным переменным
  11. Измерение потребления памяти при сортировке
  12. Генератор данных в Keras
  13. Добавление вложенных списков
  14. Список переменных с %who
  15. Разбиение текста в Python
  16. Избегание изменяемых аргументов
  17. Метод join для объединения строк
  18. Создание словарей в Python
  19. Переменные класса и экземпляра
  20. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  21. Создание Radio кнопок в tkinter
  22. Обязательные аргументы в Python
  23. Функция с **kwargs в Python
  24. Философия Python
  25. Использование модуля __future__
  26. Метод ifloordiv для пользовательских классов
  27. Установка и использование Virtualenv
  28. UserList в Python: Описание и примеры использования
  29. Работа с процессами в Python
  30. Область видимости переменных в Python
  31. Создание GUI с Tkinter: Entry
  32. Передача словаря через **kwargs
  33. Метод Self в Python
  34. Оптимизация строк в Python
  35. Работа с Colorama
  36. Поиск наиболее частого элемента списке
  37. Форматирование строк с % в Python
  38. Идентификатор объекта в Python
  39. Проверка переменных окружения в Python
  40. Модуль array: создание и использование массивов
  41. Просмотр атрибутов и методов класса
  42. Оптимизация поиска в словарях
  43. Множества и frozenset
  44. Инвертирование словаря
  45. Проверка типа объекта в Python
  46. Перегрузка операторов в Python

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