Курс 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. Библиотека Rich: форматирование текста
  4. Поиск индексов в списке
  5. Работа с файлами в Python
  6. Передача неизвестных аргументов в Python.
  7. Lambda-функция в Python: использование с map() и sum()
  8. Извлечение данных из JSON
  9. Работа с itertools
  10. Функция rsplit() в Python
  11. Метод __ilshift__ для битового сдвига влево
  12. Защита данных в Python
  13. Условные выражения в Python
  14. Декораторы классов
  15. Асинхронное выполнение задач в Python
  16. Bootle — простой веб-фреймворк
  17. Работа со слайсами
  18. Делегирование в Python
  19. Метод округления чисел
  20. Переменная Шредингера
  21. Генераторы в Python
  22. Метод count() для списка
  23. Установка и использование pyshorteners
  24. Вложенные генераторы в Python
  25. Операторы += в Python
  26. Хэш-функции в Python
  27. Генерация фальшивых данных с Faker
  28. Работа с часовыми поясами в Python.
  29. Получение срезов итераторов
  30. Применение функций в Python
  31. Управление импортом в Python
  32. Запуск внешнего кода в Jupyter
  33. Разработка игры Pong с turtle
  34. Синхронизация доступа к ресурсам
  35. Библиотека itertools: объединение списков
  36. Применение промокода в Много лосося
  37. Обработка исключений в Python
  38. Создание детектора плагиата
  39. None в Python: использование и особенности
  40. Определение размера папок в Python
  41. Любовь к Python
  42. Ввод нескольких значений
  43. Проверка файла .py на синтаксис.
  44. Метод title() в Python

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