Курс Python → Избегайте изменяемых аргументов
Один из распространенных источников ошибок при работе с функциями в Python — это использование изменяемых аргументов по умолчанию. Когда мы определяем функцию с аргументом по умолчанию, который является изменяемым объектом, таким как список или словарь, мы должны быть осторожны. При каждом вызове функции изменяемый аргумент по умолчанию не инициализируется заново, а используется последнее значение, которое было ему присвоено. Это может привести к неожиданным результатам, если мы не учитываем это поведение.
Давайте рассмотрим пример. У нас есть функция some_func, которая принимает аргумент default_arg со значением по умолчанию []. Если мы вызовем эту функцию без явного указания значения для default_arg, то при каждом вызове будет использоваться один и тот же список, который был инициализирован при определении функции. Если мы внутри функции изменим этот список, то он будет сохранен для последующих вызовов функции.
def some_func(arg=default_arg):
arg.append(1)
return arg
print(some_func()) # [1]
print(some_func()) # [1, 1]
Чтобы избежать подобных проблем, рекомендуется использовать неизменяемые объекты в качестве аргументов по умолчанию или создавать новый изменяемый объект внутри функции при каждом вызове. Например, вместо использования списка как аргумента по умолчанию, мы можем использовать None и внутри функции создать новый список, если аргумент не был передан.
Приведенный выше пример демонстрирует важность понимания того, как работают изменяемые аргументы по умолчанию в Python. Избегайте использования изменяемых объектов в качестве аргументов по умолчанию, если вы не уверены, как это поведение может повлиять на ваш код. Будьте внимательны и всегда тестируйте свой код, чтобы избежать неожиданных результатов.
Другие уроки курса "Python"
- Блок try…finally в Python
- Конкатенация строк в Python
- Аргументы *args и **kwargs
- Создание комплексных чисел
- Переменные класса и экземпляра
- Обработка исключений в Python
- Оператор Walrus: правильное использование
- Удаление элементов во время итерации
- Метод get для словарей
- Поиск анаграмм с Counter
- Замена символов в Python
- Lambda-функция в Python: использование с map() и sum()
- Вызов функций по строке в Python.
- Работа с типами данных в Python с помощью pydantic.
- Python: изменяемые и неизменяемые коллекции
- Умножение строк и списков
- Функция map() и ленивая оценка
- Функция sleep() в Python
- Работа с YAML в Python: PyYAML.
- Сортировка в Python
- Определение основы слова с showballstemmer
- Автоматизация с Python
- Создание новой даты в Python
- Декораторы в Python
- Перевернуть список в Python
- Удаление символа из строки
- Создание и обучение модели с Keras
- Подсчет элементов в Python
- Курсы Яндекс Практикум
- Сравнение def и lambda функций в Python
- Многопроцессорное программирование в Python
- Удаление элемента из списка
- Обработка исключений
- Группировка элементов в словарь
- Область видимости переменных
- Установка и обучение ChatterBot
- Определение функций с необязательными аргументами
- Порядок и длина множеств в Python
- Создание детектора плагиата
- Таймер обратного отсчета
- Оптимизация памяти с __slots__
- Отладка регулярных выражений в Python
- Векторизация в Python с NumPy.
- Печать календаря
- Сортировка с помощью параметра key
- Игра Виселица на Python
- Измерение времени выполнения кода с помощью time
- Установка библиотек в Python















