Курс 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. Оператор (*) в Python
  2. Отладка утечек памяти в Python
  3. Метод radd для пользовательских чисел
  4. Класс Counter() для подсчета элементов
  5. Оператор морж в Python 3.8
  6. Работа с массивами в Numpy
  7. Работа с IP-адресами в Python
  8. Перебор элементов списка в Python
  9. Метод Self в Python
  10. Копирование и вставка текста в Python
  11. Метод enumerate() в Python
  12. Склеивание строк без циклов
  13. Каналы Senior: Python, Java, Frontend, SQL, C++
  14. Доступ к локальным переменным
  15. Модуль Antigravity в Python 3
  16. Функции в Python: создание и вызов
  17. Создание и использование ChainMap
  18. Переопределение метода divmod
  19. Метод lt для сортировки объектов
  20. Переопределение оператора % для объектов
  21. Оценка выражений генератора в Python
  22. Метод enumerate() в Python
  23. Декораторы в Python
  24. Определение размера папок в Python
  25. Метод __irshift__ для побитового сдвига вправо
  26. Хеши в Python
  27. Обязательные аргументы в Python
  28. Pillow: работа с изображениями
  29. Оболочка Python
  30. Numpy: разбиение массивов
  31. Переопределение метода __pow__
  32. Фильтрация списка чисел
  33. Генератор списка в Python
  34. Измерение времени выполнения кода
  35. Методы split() и join() — Python строк.
  36. Переменные в Python
  37. Методы и функции в Python
  38. Вычисление фазы комплексного числа
  39. Работа с модулем os в Python
  40. Python OrderedDict и fromkeys() — работа с словарями
  41. Управление сессиями в Python
  42. Атрибуты класса и экземпляра

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