Курс 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
- Обход элементов в Python
- Функция enumerate в Python
- Создание тестовых данных с Faker
- Декораторы в Python
- Numpy: использование Ellipsis
- Принципы Zen Python
- Генераторы в Python
- Генераторы в Python
- Генераторы в Python
- Настройка Cron
- Преобразование кортежа в словарь.
- Поиск подстроки в строке
- Работа с множествами в Python
- Проверка подстроки в строке с помощью in
- Библиотека itertools: объединение списков
- Генераторы в Python
- Срез списка в Python
- Оптимизация интернирования строк
- Удаление дубликатов в pandas
- Использование подчеркивания в REPL
- Именование переменных в Python
- List Comprehension Tutorial
- Изменение списка срезом
- Удаление элементов во время итерации
- Метод rmatmul для обратного матричного умножения
- Различия символов в Python
- Применение функции map() в Python
- Искажение имен в Python
- Модуль subprocess: запуск внешних команд
- Создание коллекций из генератора
- Метод init в Python
- Функции с необязательными аргументами
- Замена переменных в Python
- Списки в Python: основы
- Python groupby() из itertools: работа с повторяющимися элементами
- Переопределение метода __and__
- Проверка окончания строки с помощью str.endswith()
- Имена объектов в Python
- Работа с классами данных
- Непрерывная проверка в Python
- Создание и обучение модели с Keras
- Проверка версии Python
- Ускорение обработки данных с %autoawait
- Измерение времени выполнения кода















