Курс 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. Модуль xkcd: добавление юмора в Python
  3. Использование defaultdict в Python
  4. Цикл for в Python
  5. Создание новых функций через partial
  6. F-строки в Python 3.8
  7. Деление в Python
  8. Деление в Python
  9. Списки в Python: синтаксис представления
  10. Объединение списков в Python
  11. Создание инструмента обнаружения плагиата
  12. Безопасный доступ к значениям словаря
  13. Конкатенация строк с методом join()
  14. Бесконечная проверка в Python
  15. SciPy: широкий функционал для математических операций
  16. Работа с IP-адресами в Python
  17. Подписка на SelectelNews в Twitter
  18. Работа с файлами в Python
  19. Сравнение объектов в Python
  20. Эффективная конкатенация строк в Python
  21. EMOT преобразование эмодзи в текст
  22. Работа со временем в Python
  23. Работа с файлами в Python
  24. %pinfo: получение информации об объекте
  25. Создание уникального проекта
  26. Поиск повторов в списке
  27. Метод classmethod
  28. Реверс строки в Python
  29. Обработка ошибок в Python
  30. Игра «Угадывание чисел»
  31. Проблема с изменяемыми аргументами
  32. Создание Telegram-бота на Python
  33. Форматирование строк в Python
  34. Функция product() в Python
  35. Обновление данных через PUT запрос
  36. Функция zip() в Python
  37. Переопределение метода __and__
  38. Разделение строк в Python
  39. Функции range() в Python
  40. Создание вкладок с TKinter
  41. Непрерывная проверка в Python
  42. Отправка POST запроса на сервер.
  43. Модуль future Python
  44. Работа с пакетами
  45. Лимиты на ресурсы Python
  46. Работа с JSON данными в Python
  47. Использование двоеточия в Python
  48. Измерение времени выполнения кода

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