Курс 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. Библиотека sh: использование команд bash в Python
  4. Переворот строки
  5. Объединение строк с помощью метода join
  6. Объединение списков в Python.
  7. Создание именованных кортежей в Python
  8. Форматирование строк в Python
  9. Параллельные вычисления в Python
  10. Получение текущего времени в Python
  11. Создание словаря через dict comprehension
  12. Профилирование кода
  13. Печать календаря в Python
  14. Замыкания в Python
  15. Сложные типы данных в Python
  16. Делегирование в Python
  17. Ограничение итераций в Python
  18. Объединение словарей в Python
  19. Запрос DELETE с библиотекой requests
  20. Работа с контекстным менеджером Pool
  21. Модуль Antigravity в Python 3
  22. Обработка исключений с блоком else
  23. Функция findall() для поиска вхождений строки
  24. Статическая типизация в Python
  25. Операции с датами в Python
  26. Изменение IP-адреса в Python
  27. Поиск самого длинного слова в списке с использованием max()
  28. Работа со словарями
  29. Любовь к Python
  30. Получение значений из словарей
  31. Сортировка и обратный порядок
  32. Управление асинхронными задачами с помощью Semaphore
  33. Приоритет операций в Python
  34. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  35. Обратное распространение ошибки
  36. Итераторы в Python
  37. Тестирование времени с Freezegun
  38. Работа с IP-адресами в Python
  39. Декораторы в Python
  40. Поиск HTML-элементов с BeautifulSoup
  41. Библиотека itertools: объединение списков
  42. Измерение времени выполнения кода в Python
  43. Проверка класса объекта
  44. Измерение времени выполнения с помощью time
  45. Создание комплексных чисел

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