Курс Python → Python Аргументы по умолчанию

В Python аргументы по умолчанию могут быть изменяемыми значениями, такими как списки, словари или множества. Когда такой аргумент используется в функции, он сохраняет свое состояние между вызовами. Это означает, что если изменить значение аргумента внутри функции, это изменение будет сохранено и будет видно при следующем вызове функции. Например:


def add_item(item, items=[]):
    items.append(item)
    return items

print(add_item('apple'))  # ['apple']
print(add_item('banana'))  # ['apple', 'banana']

В приведенном примере функция add_item принимает элемент и добавляет его в список items. При первом вызове функции список items содержит только ‘apple’, но при следующем вызове ‘banana’ добавляется к списку. Это происходит потому, что список items сохраняет свое состояние между вызовами функции.

Однако следует быть осторожным при использовании изменяемых значений по умолчанию, так как они могут привести к неожиданным результатам. Если вы хотите, чтобы каждый вызов функции использовал новый объект для аргумента по умолчанию, лучше задать его как None и создать новый объект внутри функции. Например:


def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

print(add_item('apple'))  # ['apple']
print(add_item('banana'))  # ['banana']

В этом примере функция add_item проверяет, был ли передан аргумент items. Если нет, то создается новый пустой список. Таким образом, каждый вызов функции создает новый объект для аргумента items, избегая проблем с изменяемыми значениями по умолчанию.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Создание namedtuple списком полей
  2. Работа со словарями в Python
  3. Оптимизация сравнения в Python
  4. Очистка строки в Python
  5. Логирование в Python
  6. Запуск асинхронной корутины
  7. Сериализация и десериализация объектов
  8. Работа с итераторами через срезы
  9. Сортировка с помощью key
  10. Типы возвращаемых значений в Python
  11. Операции с матрицами в Python
  12. Непрерывная проверка в Python
  13. Работа с парами ключ-значение
  14. Список переменных в Python
  15. Анонимные функции в Python
  16. Копирование словарей и списков в Python
  17. Функции map() и reduce() в Python
  18. Перемещение и удаление файлов в Python
  19. Логические значения в Python
  20. Операции со строками в Python
  21. Переопределение метода divmod
  22. Преобразование в float
  23. Создание коллекций из генератора
  24. Регистрация на курсы SF Education
  25. Работа со стеком в Python
  26. Concrete Paths — метод .with_suffix()
  27. Цепные операции в Python
  28. Работа с областями видимости переменных
  29. Проверка условий в Python
  30. Списковое включение в Python
  31. Управление ресурсами с контекстными менеджерами
  32. Отрицательные индексы списков в Python
  33. Monkey Patching в Python
  34. Оптимизация методов в Python 3.7
  35. Декораторы в Python
  36. Хранение переменных в словаре.
  37. Распаковка аргументов в Python
  38. Присвоение значений переменным в Python
  39. Работа с Telegram API на Python
  40. Транспонирование 2D-массива с помощью zip
  41. Создание таблиц в терминале с PrettyTable
  42. Ограничение итераций в Python
  43. Преобразование текста в речь с Python

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