Курс 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"
- Модуль itertools: эффективная работа с итераторами
- Переопределение метода __and__
- Проверка надежности пароля на Python
- Метод ifloordiv для пользовательских классов
- Получение комбинаций в Python
- Профилирование с Pandas
- Метод rsub в Python: расширение функциональности вычитания
- Работа с модулем bisect
- Транспонирование 2D-массива с помощью zip
- Python Метод Union Множеств
- Присвоение значений переменным в Python
- Добавление элементов в список: append() vs extend()
- Список переменных с %who
- Библиотека Rich: форматирование текста
- Обезопасьте ввод данных
- Генератор данных в Keras
- Работа с argparse
- Использование type hints
- Модуль pprint
- Функции any() и all() в Python
- Получение текущего времени в Python
- Поиск простых чисел
- Генераторы в Python
- Проблемы с dict в Python
- Отправка HTTP-запросов в Python
- Открытие и запись файлов
- Генераторы в Python
- Перевод текста с Python Translator
- Метод rsub для пользовательских чисел
- Получение списка файлов в директории с использованием os
- Работа со словарями с defaultdict из collections
- Многострочные строки в Python
- Распаковка значений в Python
- Измерение времени выполнения кода с помощью time
- TypedDict для kwargs в Python 3.12
- Генерация строк с .join()
- Работа с переменными в Python
- Удаление ключа из словаря в Python
- Метод join() с набором
- Объединение списков с помощью zip
- Перехват исключений в Python
- Логирование с Logzero
- Хранение переменных в словаре.
- Метод __irshift__ для Python
- Обход дочерних элементов BeautifulSoup
- Создание комплексных чисел
- Поиск email
- Объединение Python и Shell















