Курс 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. Парсинг статей с Newspaper3k
  2. Модуль Operator в Python
  3. Создание итерируемых объектов
  4. Метод enumerate() в Python
  5. Функция map() и ленивая оценка
  6. Виртуальное окружение Python
  7. Подсчет элементов в Python
  8. Библиотека funcy: удобные утилиты
  9. Метод setdefault() в Python
  10. Управление памятью в numpy.
  11. Фильтрация списков с itertools
  12. Методы shutil для работы с файлами
  13. Namedtuple в Python
  14. Изменение списка срезом
  15. Лимиты на ресурсы Python
  16. Удаление символов новой строки в Python.
  17. Оператор in и not in в Python
  18. Измерение времени выполнения
  19. Получение обратного списка чисел
  20. Оформление кода на Python
  21. Создание и обучение модели с Keras
  22. Mad Libs Generator
  23. Работа с множествами в Python
  24. Класс UserDict: дополнительная функциональность
  25. Бинарный поиск
  26. Делегирование в Python
  27. Проверка версии Python
  28. Секреты Python
  29. Работа с кортежами в Python
  30. Добавление элемента в список.
  31. Форматирование чисел в Python
  32. Создание комплексных чисел
  33. Python Менеджер контекста
  34. Фильтрация списка от «ложных» значений
  35. Работа со словарями с defaultdict из collections
  36. Декораторы классов
  37. Python Тесты и Гайды
  38. Модуль itertools: эффективная работа с итераторами
  39. Циклы в Python
  40. Структура данных словарь в Python
  41. Инверсия списка и строки в Python
  42. Работа с пользовательским вводом
  43. Функциональное программирование в Python
  44. Поиск наиболее частого элемента в списке
  45. Метод __irshift__ для Python
  46. Метод __irshift__ для побитового сдвига вправо

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