Курс 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. Декоратор Ajax required
  2. Сложные типы данных в Python
  3. globals и locals
  4. Оптимизация гиперпараметров в Python
  5. Метод init в Python
  6. Операторы присваивания в Python
  7. Измерение времени выполнения кода
  8. CSV строка разделение в Python
  9. GitHub в Telegram: подписка на уведомления
  10. Работа с CSV файлами
  11. Оператор деления для класса Rational
  12. Добавление цвета в консоли
  13. Условное добавление элементов в список
  14. Работа с YAML в Python
  15. Преобразование объекта в строку
  16. Математические функции в Python
  17. Генератор данных в Keras
  18. Тестирование функции сложения
  19. Замена текста с re.sub()
  20. Объединение кортежей в Python
  21. Работа с f-строками 2.0
  22. Генераторы данных
  23. Псевдонимы в Python
  24. Упрощенный вывод данных в Python
  25. Python enumerate() использование
  26. Эффективная конкатенация строк в Python
  27. Функция reduce() из модуля functools
  28. Генераторы в Python
  29. Транспонирование 2D-массива с помощью zip
  30. Условные выражения в Python
  31. Генераторы в Python
  32. Оператор break в Python
  33. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  34. Форматирование строк в Python
  35. Поиск индекса элемента в списке
  36. Руководство по Pymorphy2
  37. Оператор += в Python
  38. Метод pop() списка
  39. Итераторы в Python
  40. Склеивание строк без циклов
  41. Разделение строки на пары ключ-значение.
  42. Работа с файлами в Python
  43. Явный импорт в Python
  44. Регистрация на TenChat
  45. Цикл for в Python

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