Курс 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. Оператор del в Python
  2. Операции с массивами в NumPy
  3. Генераторы в Python
  4. Присоединение элементов коллекции
  5. Форматирование данных с помощью pprint
  6. Комментарии в Python
  7. Генераторы в Python
  8. Concrete Paths — метод .with_suffix()
  9. Округление дробей в Python
  10. Фильтрация списка от «ложных» значений
  11. Создание списка дат
  12. Генераторы в Python
  13. Переопределение метода __floordiv__
  14. Протокол управления контекстом
  15. Переопределение метода __or__()
  16. Справка по импортированным модулям
  17. Возврат нескольких значений
  18. Изменение IP-адреса в Python
  19. Создание GUI с Tkinter: Entry
  20. Преобразование строки в число
  21. Генераторы списков в Python
  22. Магические методы в Python
  23. Проверка существования переменной с оператором :=
  24. Объединение объектов в Python
  25. Декоратор total_ordering для класса Point
  26. Названия столбцов в Python таблицах
  27. Создание множества в Python
  28. Управление экспортом элементов
  29. Оператор assert в Python
  30. Concrete Paths в Python
  31. Метод get() для словарей
  32. Объединение множеств в Python
  33. Метод setdefault() в Python
  34. Работа с словарями в Python
  35. Операторы увеличения и уменьшения переменной
  36. Переопределение метода __rshift__
  37. Функции высшего порядка в Python
  38. Глобальные переменные в Python
  39. Модуль functools в Python
  40. Функция map() и ленивая оценка
  41. Работа с файлами в Python
  42. Создание именованных кортежей в Python
  43. Оптимизация сравнения в Python
  44. Работа с timedelta
  45. Многострочные строки в Python
  46. Функция eval() в Python

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