Курс 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"
- Генерация фальшивых данных с Faker
- Оператор zip в Python
- f-строки в формате строк
- Работа с дробями в Python
- Создание класса в Python
- Построение графиков в терминале с bashplotlib
- Создание панели меню Tkinter
- Работа с очередями в Python
- Объединение списков с использованием itertools.chain
- Разделение списка на гнппы
- Операторы увеличения и уменьшения в Python
- Генераторы в Python
- Методы HTTP запросов в Flask
- Передача неизвестных аргументов в Python.
- Генерация резюме в Gensim
- Форматирование строк с f-строками
- Python: цикл for и оператор присваивания
- Проверка подстроки в строке
- Обработка ошибок в JSON данных
- Проверка списка: any() и all()
- Удаление элементов из списка в Python
- Подписка на каналы разработчиков
- Перегрузка операторов в Python
- Создание и операции с дробями
- Метод remove() для удаления элемента из списка
- Принципы SRP и OCP
- Форматирование строк в Python
- Создание директории в Python
- Условные выражения в Python
- Работа с массивами в Python
- Создание виртуальной среды
- Удаление файлов в Python
- Ускорение обработки данных с %autoawait
- Динамические маршруты во Flask
- Удаление дубликатов из списка с помощью dict.fromkeys
- Класс Counter() для подсчета элементов
- Профилирование кода на Python
- Множественные конструкторы в Python
- Работа с f-строками 2.0
- Логирование в Python
- Метод getitem для доступа к элементам последовательности
- Python-dateutil — работа с датами
- Основные методы NumPy















