Курс 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"
- Определение объема памяти объекта
- Философия Python
- Magic Commands — улучшение работы с Python
- Особенности множеств в Python
- Логирование в Python
- Обход дочерних элементов BeautifulSoup
- Сортировка и обратный порядок
- Утечки переменных цикла в Python 3.x
- Перевод эмодзи и эмотиконов.
- Переворот списка в Python
- Проверка элементов списка условием
- Профилирование данных с Pandas.
- Модуль inspect: получение информации о объектах
- Разница между датами
- JMESPath в Python
- Сравнение строк в Python
- Функция zip() в Python
- Метод is_absolute() для PurePath
- Работа с геоданными с помощью geopy
- Создание списков в Python
- Модуль subprocess: запуск внешних команд
- Оператор continue в Python
- Работа с IP-адресами в Python
- Вызов внешних программ в Python с помощью sh
- Удаление эмодзи с помощью pandas
- Возврат нескольких значений
- Область видимости переменных
- Замена текста с re.sub()
- Работа с датами в Python
- Введение в Python
- Импорт объектов из модулей
- Курс по дообучению ChatGPT
- Ввод нескольких значений
- Применение функции к каждому элементу списка
- Непрерывная проверка в Python
- Основы Python
- Функция zip() — объединение последовательностей
- Преобразование чисел в Python
- Установка Python3.7 и PIP
- Реализация метода __abs__ в Python
- Проверка условий в Python
- Операции с массивами в NumPy
- Сортировка с помощью параметра key
- Создание списков в Python
- Многоточие в Python















