Курс 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. Модуль itertools: эффективная работа с итераторами
  2. Переопределение метода __and__
  3. Проверка надежности пароля на Python
  4. Метод ifloordiv для пользовательских классов
  5. Получение комбинаций в Python
  6. Профилирование с Pandas
  7. Метод rsub в Python: расширение функциональности вычитания
  8. Работа с модулем bisect
  9. Транспонирование 2D-массива с помощью zip
  10. Python Метод Union Множеств
  11. Присвоение значений переменным в Python
  12. Добавление элементов в список: append() vs extend()
  13. Список переменных с %who
  14. Библиотека Rich: форматирование текста
  15. Обезопасьте ввод данных
  16. Генератор данных в Keras
  17. Работа с argparse
  18. Использование type hints
  19. Модуль pprint
  20. Функции any() и all() в Python
  21. Получение текущего времени в Python
  22. Поиск простых чисел
  23. Генераторы в Python
  24. Проблемы с dict в Python
  25. Отправка HTTP-запросов в Python
  26. Открытие и запись файлов
  27. Генераторы в Python
  28. Перевод текста с Python Translator
  29. Метод rsub для пользовательских чисел
  30. Получение списка файлов в директории с использованием os
  31. Работа со словарями с defaultdict из collections
  32. Многострочные строки в Python
  33. Распаковка значений в Python
  34. Измерение времени выполнения кода с помощью time
  35. TypedDict для kwargs в Python 3.12
  36. Генерация строк с .join()
  37. Работа с переменными в Python
  38. Удаление ключа из словаря в Python
  39. Метод join() с набором
  40. Объединение списков с помощью zip
  41. Перехват исключений в Python
  42. Логирование с Logzero
  43. Хранение переменных в словаре.
  44. Метод __irshift__ для Python
  45. Обход дочерних элементов BeautifulSoup
  46. Создание комплексных чисел
  47. Поиск email
  48. Объединение Python и Shell

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