Курс 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. Создание и инициализация объектов
  3. Работа с CSV файлами в Python
  4. Переменная с нижним подчеркиванием
  5. Работа с collections.Counter
  6. Оболочка Python
  7. Передача аргументов через **arguments
  8. Работа с модулем cmath
  9. Генераторы списков
  10. Метод join() для объединения элементов
  11. Аргументы *args и **kwargs
  12. Функция zip() для объединения списков
  13. Применение функции к каждому элементу списка
  14. Удаление ссылок в Python
  15. Работа с изменяемыми коллекциями
  16. Извлечение новостей с помощью newspaper3k
  17. Переопределение метода len
  18. Избегание изменяемых аргументов
  19. Работа со временем в Python
  20. Сравнение строк в Python
  21. Импорт модулей в Python 3.12
  22. Показ всплывающих окон Tkinter
  23. Работа с областями видимости переменных
  24. Генераторы в Python
  25. PrettyTable: создание таблицы
  26. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  27. Логический оператор «and» в Python
  28. Пустой оператор pass в Python
  29. Работа с геоданными с помощью geopy
  30. Вычисление фазы комплексного числа
  31. Реализация метода __abs__ в Python
  32. Создание словарей с defaultdict
  33. Метод __ixor__ для побитового исключающего ИЛИ
  34. Печать календаря в Python
  35. Работа с множествами в Python
  36. Функция reduce() в Python
  37. Атрибуты класса и экземпляра
  38. Нахождение пересечения множеств
  39. Объединение словарей в Python
  40. UserString в Python
  41. Оператор умножения для вектора
  42. Повторение и перенос строки
  43. Основы работы со списками
  44. Преобразование генераторов в циклы
  45. Подсчет частоты элементов с Counter
  46. Отправка HTTP-запросов с User-Agent

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