Курс 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. Фильтрация списков с itertools
  2. Генерация случайных данных в NumPy
  3. Нахождение отличий в списках
  4. Ускорение кода с помощью векторизации
  5. Функция count() в Python
  6. Сравнение def и lambda-функций
  7. Генераторы по генератору
  8. Python Enum Weekday Usage
  9. Создание словаря и множества
  10. Метод join() для объединения элементов
  11. Обработка исключений в Python
  12. Работа с аргументами командной строки в Python
  13. Создание итератора
  14. Оценка точности модели
  15. Строковое представление объектов
  16. Поиск наиболее частого элемента в списке
  17. Сравнение def и lambda функций в Python
  18. Обход дочерних элементов BeautifulSoup
  19. Использование html-скриптов в Jupyter Notebook
  20. Оператор объединения словарей
  21. Избегание циклических зависимостей классов в Python
  22. Удаление файлов в Python
  23. Проверка на истинность объектов в Python
  24. Повторение элементов списков
  25. Работа с CSV файлами
  26. kwargs в Python
  27. Проверка версии Python
  28. Оператор match в Python
  29. Работа со строками
  30. Переворот строки с использованием цикла
  31. Перевернуть список в Python
  32. Компиляция регулярных выражений
  33. Использование super() в Python
  34. Управление памятью в numpy.
  35. Множественное наследование в Python
  36. Перетасовка списков в Python
  37. Форматирование чисел в Python
  38. Тестирование времени с Freezegun
  39. Работа с файлами в Python
  40. Переопределение оператора % для объектов
  41. Измерение времени выполнения кода в Python
  42. Создание Radio кнопок в tkinter
  43. JSON в Python: модуль, dump, dumps, load
  44. Функция с *args.
  45. Объединение итераторов
  46. Декораторы в Python
  47. Отладка в командной строке
  48. Python: изменяемые и неизменяемые коллекции

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