Курс 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. Работа с кортежами
  2. Обновление множества в Python
  3. Фильтрация входных данных в Python
  4. ChainMap избыточные ключи
  5. Копирование в Python
  6. Работа с базами данных SQLite
  7. Измерение времени выполнения кода
  8. Цикл for с enumerate() в Python
  9. Преобразование символов с помощью map
  10. Форматирование строк в Python
  11. Подсчет частоты элементов с Counter
  12. Преобразование списка в словарь через генератор
  13. Инициализация объекта
  14. Объединение словарей в Python
  15. Работа с IP-адресами в Python
  16. Объединение словарей в Python
  17. Назначение максимального и минимального значения переменной в Python.
  18. Поиск индекса элемента
  19. Функции map, filter, reduce
  20. Проверка условий: all и any
  21. JSON в Python: модуль, dump, dumps, load
  22. Блок try…finally в Python
  23. Установка и использование pyshorteners
  24. Оператор морж в Python 3.8
  25. Работа с NumPy массивами
  26. Метод rmatmul для пользовательских матриц
  27. Статическая типизация в Python
  28. Функции any() и all() в Python
  29. Модуль itertools: эффективная работа с итераторами
  30. Создание словарей с defaultdict()
  31. Оператор in и not in в Python
  32. Python Метод sleep() времени
  33. Colorama: окрашивание текста в Python
  34. Разделение строки с помощью split()
  35. Работа со строками в Python
  36. Контроль точности вывода чисел
  37. Транспонирование 2D-массива с помощью zip
  38. Копирование объектов в Python
  39. Отделение звука от видео
  40. Декоратор защиты анонимных пользователей
  41. Работа с defaultdictами в Python
  42. Concrete Paths в Python
  43. Отладка производительности Python
  44. Переопределение метода __floordiv__
  45. Установка и обучение ChatterBot
  46. Функции all() и any() в Python
  47. Упрощение работы с JSON-данными в Python
  48. Получение пути к текущему скрипту с помощью os

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