Курс 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. Функция reversed() в Python
  2. Управление пакетами с pip
  3. Python Метод sleep() из time
  4. Роль object и type в Python
  5. Генератор списка в Python
  6. Установка Home Assistant
  7. Печать календаря
  8. Основы работы с os
  9. Оформление кода по PEP 8
  10. Отображение графиков в Jupyter с Matplotlib
  11. Работа с Event() в threading
  12. Обработка исключений в Python
  13. Особенности ключей словаря в Python
  14. Хэш-функции и метод цепочек
  15. Измерение времени выполнения кода
  16. Область видимости переменных
  17. Функция map() и ленивая оценка
  18. Отношения подклассов в Python
  19. Функция product() в Python
  20. Группировка элементов в словарь
  21. Генераторные функции в Python
  22. Именованные кортежи в Python
  23. Метод __iand__ для пользовательских классов
  24. Ошибка NotImplemented в Python
  25. Метод difference_update() — разность множеств
  26. Оператор обр. импликации
  27. Переменная с нижним подчеркиванием
  28. Множественное наследование в Python
  29. Генераторы и сеты в Python
  30. Модуль functools в Python
  31. Переворот строки
  32. capitalize() — изменение регистра первого символа строки
  33. Поиск шаблона в строке
  34. Проверка типов с помощью isinstance
  35. Проектирование Singleton с метаклассом
  36. Форматирование вывода с F-строками
  37. Использование функции product
  38. Метод split() для разделения строк
  39. Обратное распространение ошибки
  40. Векторизация в Python с NumPy.
  41. Путь к интерпретатору Python
  42. Сортировка с помощью параметра key
  43. Библиотека Chartify: руководство
  44. Циклы for в Python
  45. Многострочные комментарии в Python
  46. Частичное совпадение пользовательского ввода в Python 3.10

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