Курс 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. Создание веб-приложения с Flask
  2. Подсчет частоты элементов с Counter
  3. Работа с IP-адресами в Python
  4. Python и Юникод: работа с цифрами
  5. Извлечение статей с newspaper3k
  6. Основы Python за 14 дней
  7. Удаление файлов в Python
  8. Переопределение метода __lshift__
  9. Изменения в обработке логических значений
  10. Работа с JSON данными в Python
  11. Изменение объектов в Python
  12. Работа с переменными в Python
  13. Генерация UUID в Python
  14. Удаление элементов по срезу
  15. Поиск уникальных и повторяющихся элементов
  16. TypedDict для kwargs в Python 3.12
  17. Установка и обучение ChatterBot
  18. Функции с дополнением
  19. Создание директории в Python
  20. Открытие и запись файлов
  21. Проверка версии Python
  22. Concrete Paths — метод .with_suffix()
  23. Упрощение условных выражений с тернарным оператором
  24. Python Calendar Usage
  25. Генераторы в Python
  26. Метод setdefault() в Python
  27. Объединение списков в Python
  28. Преобразование списка в словарь через генератор
  29. Использование функции enumerate()
  30. Оператор zip в Python
  31. Проверка версии Python
  32. Работа с аргументами командной строки
  33. Лямбда-функции в Python
  34. Форматирование заголовков в Python
  35. Просмотр атрибутов и методов класса
  36. Ограничение итераций в Python
  37. Библиотека wikipedia для Python
  38. Возвращение нескольких значений
  39. Генераторы в Python
  40. Работа с timedelta в Python
  41. Mad Libs Generator
  42. Декораторы с аргументами
  43. Генерация QR-кодов с библиотекой qrcode
  44. TON Smart Challenge #2: участие и подготовка
  45. Получение срезов итераторов
  46. Оператор continue в Python
  47. Преобразование в float

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