Курс 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. Группы исключений в Python
  4. Извлечение новостей с помощью newspaper3k
  5. Скрытие вывода данных
  6. Python Метод sleep() из time
  7. Встраивание HTML в Jupyter Notebook
  8. Изменение IP-адреса в Python
  9. Упрощение работы с JSON-данными в Python
  10. Нахождение хеша для бесконечности и NaN в Python
  11. Объединение списков в Python.
  12. Удаление элементов по срезу
  13. Поиск частого элемента
  14. Операции с комплексными числами
  15. Метод radd для пользовательских чисел
  16. Работа с deque из collections
  17. Форматирование строк в Python
  18. Логирование в Python
  19. Метод join() для объединения элементов
  20. Форматирование кода на Python
  21. Управление асинхронными задачами с помощью Semaphore
  22. Создание объекта времени
  23. Объединение словарей в Python
  24. Генерация случайных чисел в Python
  25. Оператор Walrus в Python
  26. Преобразование строк в числа в Python
  27. Сравнение объектов в Python
  28. Синхронизация потоков с time.sleep()
  29. Лямбда-функции в Python
  30. Big O оптимизация
  31. Отображение графиков в Jupyter с Matplotlib
  32. Асинхронное выполнение задач в процессах
  33. Удаление falsy-значений из списка с помощью filter
  34. Оператор распаковки в Python
  35. Python enumerate() использование
  36. Работа с модулем random
  37. Аргумент по умолчанию
  38. Объединение списков в Python
  39. Переопределение метода xor в Python
  40. Преобразование документов в PDF с помощью Spire.Office
  41. Выражения-генераторы в Python
  42. Генераторы по генератору
  43. Создание списка через итерацию
  44. Библиотека sh: удобные команды терминала
  45. Проверка класса объекта
  46. Методы сравнения множеств

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