Курс 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. Метод invert для побитового отрицания
  3. TypedDict для kwargs в Python 3.12
  4. kwargs в Python
  5. Объединение строк с помощью метода join
  6. Списковое включение в Python
  7. Работа с файлами в Python
  8. Создание списка через итерацию
  9. Цикл while в Python
  10. Списки в Python
  11. Печать календаря
  12. Игра Виселица на Python
  13. Объединение списков в Python
  14. Установка и использование howdoi
  15. Работа с необработанными строками
  16. Работа с контекст-менеджером «with»
  17. Транспонирование 2D-массива с помощью zip
  18. Декоратор @override
  19. Условное добавление элементов в список
  20. Установка и использование модуля Wikipedia
  21. Модуль functools в Python
  22. Удаление файлов с shutil.os.remove()
  23. Объединение списков в Python
  24. Тернарный оператор в Python
  25. Вычисление натурального логарифма в NumPy
  26. Проверка на палиндром
  27. Форматирование строк в Python
  28. Оператор zip в Python
  29. Python 3.12: Псевдонимы типов
  30. Повторение элементов в Python
  31. Создание и обучение модели с Keras
  32. Добавление Progressbar в Python
  33. Операторы Splat и splatty-splat
  34. Метод split() для разделения строк
  35. Обновление шаблона base.html
  36. Генераторы данных
  37. Обработка ошибок в Python
  38. Вывод сложных структур данных с помощью pprint
  39. Вложенные циклы в Python
  40. Создание новых функций через partial
  41. Метод join() для объединения элементов в строку.
  42. Аннотации типов в Python
  43. Объединение множеств в Python
  44. Работа с модулем random
  45. Потоковый ввод в Python
  46. Метод setitem в Python

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