Курс 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. Функция count() в Python
  2. Логирование с Logzero: ротация файла
  3. Манипуляция формой массива в Numpy
  4. Перевод эмодзи и эмотиконов.
  5. Очистка входных данных
  6. Улучшенные подсказки для импорта в Python 3.12
  7. Установка и использование модуля Wikipedia
  8. Виртуальное окружение Python
  9. Обмен переменными в Jupyter
  10. Проверка файла .py на синтаксис.
  11. Отрицательные индексы списков
  12. Логические значения в Python
  13. Работа с timedelta
  14. Преобразование данных в Python
  15. Закрытие файла в Python
  16. Метод setdefault() в Python
  17. Проверка списка: any() и all()
  18. Проверка версии Python
  19. Копирование объектов в Python
  20. Объединение Python и Shell
  21. Модуль xkcd: добавление юмора в Python
  22. EMOT преобразование эмодзи в текст
  23. Работа с JSON данными в Python
  24. Применение функции map() в Python
  25. Операторы объединения в Python 3.9
  26. Путь к интерпретатору Python
  27. Лямбда-функции в Python
  28. Транспонирование 2D-массива с помощью zip
  29. Оператор (*) в Python
  30. Прокачанный трейсинг ошибок
  31. Справка по импортированным модулям
  32. Объединение списков в Python
  33. Сортировка с помощью параметра key
  34. Добавление элементов в список
  35. Использование метода lower()
  36. Простой калькулятор Python
  37. Создание вкладок с TKinter
  38. Оптимизация строк в Python
  39. Списки в Python: синтаксис представления
  40. Динамическая типизация в Python
  41. Сортировка в Python
  42. Изменение списка срезами
  43. Метод __ilshift__ для битового сдвига влево
  44. Кортеж в Python: создание и использование
  45. Операторы сравнения в Python
  46. Поиск подстроки в строке
  47. Вывод символов строки в Python
  48. Создание Telegram-бота на Python

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