Курс 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. Явный импорт в Python
  2. Копирование объектов в Python
  3. Структура данных deque в Python
  4. Изменение IP-адреса в Python
  5. Метод enumerate() в Python
  6. Создание GUI с Tkinter: Entry
  7. Документирование функций в Python
  8. Конкатенация строк с помощью join()
  9. Добавление элементов в список: append() vs extend()
  10. Аргумент по умолчанию
  11. Принципы программирования
  12. Структура данных словарь в Python
  13. Генераторы и сеты в Python
  14. Операторы присваивания в Python
  15. Оценка точности модели
  16. Именованные срезы в Python
  17. Генераторы списков в Python
  18. Обработка StopIteration в Python
  19. Преобразование чисел в восьмеричную строку
  20. Возврат нескольких значений
  21. Транспонирование 2D-массива с помощью zip
  22. Подсказки типов в Python
  23. Создание и использование ChainMap
  24. Работа со словарями в Python
  25. Работа с файлами в Python
  26. Работа с YAML в Python
  27. Работа с множествами в Python
  28. Делегирование в Python
  29. Получение частей дроби
  30. Python: Splat-оператор и splatty-splat
  31. Изменения в обработке логических значений
  32. Отступы в Python
  33. Синхронизация доступа к ресурсам
  34. Метод join() для объединения элементов строки
  35. Удаление символа из строки
  36. Сравнение объектов в Python
  37. Получение текущей даты и времени
  38. Переопределение метода __rshift__
  39. Lambda Functions in Python
  40. Python Аргументы по умолчанию
  41. Преобразование документов в PDF с помощью Spire.Office
  42. Разделение строки с помощью re.split()
  43. Создание вкладок с TKinter
  44. Декораторы в Python
  45. Комментарии в Python.

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