Курс 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 Поверхностное Копирование
- Переопределение метода __or__()
- Склеивание строк без циклов
- Итераторы с потерямиZIP
- Освоение Python
- Функция map() в Python
- Объединение списков в Python
- Создание уникального проекта
- Циклы for в Python
- Python 3.12: переиспользование кавычек
- Справка по импортированным модулям
- Проверка вхождения подстроки
- Оператор Walrus: правильное использование
- Переименование файлов в Python
- Закрытие файла в Python
- Проверка на палиндром
- История Python
- Регулярные выражения: метод match
- Основы работы с os
- Цепные операции в Python
- Бинарный поиск
- Сравнение объектов в Python
- UserString в Python
- Моржовый оператор в Python 3.8
- Класс Counter() для подсчета элементов
- Работа со списками
- Настройка логгера Logzero
- Установка и использование библиотеки google
- Удаление специальных символов с помощью re.sub
- Метод Enumerate() для списков
- Работа с Event() в threading
- Поиск простых чисел
- Декоратор Ajax required
- Python Менеджер контекста
- Оператор space-invader
- Поиск индексов подстроки
- Открытие и запись файлов
- Подсчет элементов с помощью Counter из collections
- Импорт с альтернативным именем
- Атрибуты объекта в Python
- Удаление ключа из словаря в Python
- Оптимизация создания строк
- Модуль math: константы π и e
- Работа со слайсами
- Python Enumerate















