Курс 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. Лямбда-функции для min/max
  2. Поиск индекса элемента
  3. Подсчет вхождений элементов
  4. Цикл for в Python
  5. Печать календаря
  6. Объединение словарей в Python
  7. Приближение чисел в Python
  8. Принципы LSP и ISP в Python
  9. Операции со строками в Python
  10. Оператор is в Python
  11. Метод __ilshift__ для битового сдвига влево
  12. Проблема с изменяемыми аргументами
  13. Замыкания в Python
  14. Основные функции и модули Python
  15. Изменение IP-адреса в Python
  16. Работа с CSV файлами
  17. Структура данных deque в Python
  18. Оператор is в Python
  19. Возведение в квадрат с помощью itertools
  20. Наиболее частотные элементы с помощью Counter
  21. Команда %dhist — список посещенных каталогов
  22. Модуль xkcd: загрузка комиксов
  23. Принципы Zen Python
  24. Поиск уникальных элементов строкой в Python
  25. Преобразование многоуровневого словаря
  26. Ускорение кода с помощью векторизации
  27. Поиск файлов по шаблону
  28. Подписка на SelectelNews в Twitter
  29. Дефолтные параметры в Python
  30. Константы в модуле cmath
  31. Оптимизация методов в Python 3.7
  32. Основные методы NumPy
  33. Оператор объединения словарей
  34. Оператор @ для умножения матриц
  35. Множественное наследование в Python
  36. Установка библиотек в Python
  37. Работа со строками в Python
  38. Цикл for в Python
  39. Декораторы в Python
  40. Разница между датами
  41. Установка и использование Virtualenv
  42. Функция reduce() в Python
  43. Модуль os: работа с файлами и папками
  44. Работа с модулем random
  45. Python: отсутствие точек с запятыми
  46. Шаблоны и наследование в Flask
  47. Конвертация коллекций в Python
  48. Создание списка через итерацию
  49. Метод join() для объединения элементов

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