Курс 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. Модуль future Python
  4. Оператор * в Python
  5. Создание и использование модулей в Python
  6. Комментарии в Python
  7. UserList в Python: Описание и примеры использования
  8. Создание обратного итератора
  9. Создание треугольника Паскаля
  10. Сортировка в Python
  11. Работа с Event() в threading
  12. Построение графиков в терминале с bashplotlib
  13. Реализация метода __abs__ в Python
  14. Переопределение метода __or__()
  15. Функция product() из itertools
  16. Экспорт данных в файл.
  17. Создание GUI с Tkinter: Entry
  18. Кортеж в Python: создание, доступ, изменение
  19. Управление ресурсами с контекстными менеджерами
  20. Библиотека Rich: форматирование текста
  21. Определение локальных переменных в Python
  22. Bootle — простой веб-фреймворк
  23. Абстракции словарей и множеств в Python
  24. Разделение строки в Python
  25. Метод rmatmul для обратного матричного умножения
  26. Улучшение читаемости кода в Python
  27. Генераторы в Python
  28. Python Менеджер контекста
  29. Синхронизация потоков с time.sleep()
  30. Декораторы в Python
  31. Работа с утверждениями в Python
  32. Лямбда-функции в defaultdict
  33. Удаление дубликатов из списка
  34. Расчет времени выполнения программы
  35. Преобразование кортежа в словарь.
  36. Установка Home Assistant
  37. Анонимные функции Lambda
  38. Преобразование регистра символов
  39. Декораторы классов
  40. Методы list в Python
  41. Генерация чисел с range()
  42. Повторение элементов в Python
  43. Работа с комбинациями в Python.
  44. 9 уловок для чистого кода
  45. Подсказки при вводе данных в Python
  46. Реверс строки в Python
  47. Создание новых списков в Python

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