Курс 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. Расчет времени выполнения программы
  2. Форматирование строк в Python
  3. Инверсия списков и строк в Python
  4. IPython и Jupyter Notebook: руководство
  5. Установка и использование Python-dateutil
  6. Разность множеств
  7. Генерация случайных данных в NumPy
  8. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  9. Поиск подстроки в строке
  10. Преобразование регистра символов
  11. ROT13 Шифр Цезаря в Python
  12. Метод get для словаря
  13. Определение функций с необязательными аргументами
  14. Метод setitem в Python
  15. Метод join() для объединения элементов строки
  16. Просмотр атрибутов и методов класса
  17. Декораторы в Python
  18. Многострочные комментарии в Python
  19. Установка и загрузка Instaloader
  20. Резервирование символов в Python
  21. Обновление данных через PUT запрос
  22. Модуль pprint
  23. Работа с кортежами
  24. Переопределение оператора % для объектов
  25. Транспонирование 2D-массива с помощью zip
  26. Операторы сравнения в Python
  27. Определение наиболее частого элемента с помощью collections.Counter
  28. Получение списка кортежей из словаря
  29. Метод append() для списка
  30. Установка и использование Telegram API в Python
  31. Генерация случайных чисел в Python
  32. Оператор Walrus: правильное использование
  33. Многопоточность и асинхронное программирование в Python
  34. Переопределение метода xor в Python
  35. Форматирование объектов с модулем pprint
  36. Работа с deque из collections
  37. Декоратор защиты анонимных пользователей
  38. Python 3.12: переиспользование кавычек
  39. Метод сравнения объектов в Python
  40. Преобразование списка в словарь через генератор
  41. Генератор списка в Python
  42. Метод count() для списков
  43. Повторение элементов списков
  44. Переворот списка в Python
  45. Функция reduce() в Python

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