Курс 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. Работа с Telegram API на Python
  3. Фильтры Pillow: NEAREST, BILINEAR, BICUBIC
  4. Перетасовка списков в Python
  5. Асинхронное выполнение задач в Python
  6. Удаление символов новой строки в Python.
  7. Искажение имен в Python
  8. Получение идентификатора объекта в памяти
  9. Управление User-Agent в Python
  10. Модуль inspect: получение информации о объектах
  11. Принципы программирования
  12. Работа с датой и временем в Python
  13. Ускоренный импорт библиотек
  14. Вывод символов строки в Python
  15. Руководство по библиотеке pydantic
  16. Работа с WindowsPath()
  17. Оператор умножения для вектора
  18. Сохранение и загрузка модели в PyTorch
  19. Метод rsub в Python: расширение функциональности вычитания
  20. Форматирование строк в Python
  21. Pretty-printing JSON в Python
  22. Подсчет частоты элементов с Counter
  23. Группы исключений в Python
  24. Преобразование документов в PDF с помощью Spire.Office
  25. Обмен значений переменных в Python
  26. Многострочные комментарии в Python
  27. Множественное наследование в Python
  28. Замена элементов в списке с помощью генераторов списков
  29. Создание класса в Python
  30. Работа с байтовыми строками в Python
  31. Перевернуть список в Python
  32. Функция print() — вывод информации
  33. Функция rsplit() в Python
  34. Модуль future Python
  35. Декораторы в Python
  36. Создание итерируемых объектов
  37. Преобразование вложенного списка
  38. Лямбда-функции в Python
  39. Лямбда-функции в Python
  40. Приоритет операций в Python
  41. Проверка надежности пароля на Python
  42. Построение графиков в терминале с bashplotlib
  43. Вывод баннеров

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