Курс 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"
- Изменяемые и неизменяемые объекты
- Поиск простых чисел
- Переопределение метода __and__
- Сериализация данных в JSON с помощью json.dumps
- Реверс строки в Python
- Установка и использование pyshorteners
- Управление браузером с Selenium
- Метод join() для объединения элементов в строку.
- Генерация случайных чисел Python
- Форматирование данных с помощью pprint
- Функции с дополнением
- Метод clear для коллекций
- None в Python: использование и особенности
- Итерации в Python
- Декораторы в Python
- Каналы Senior: Python, Java, Frontend, SQL, C++
- Оператор Walrus в Python 3.8
- Генераторы в Python
- Извлечение новостей с newspaper3k
- GitHub в Telegram: подписка на уведомления
- Принципы SRP и OCP
- Установка Git и AWS CLI
- Метод rename() для переименования файлов и каталогов
- Сохранение и загрузка модели в PyTorch
- Функция __init__ в Python
- Работа с итераторами в Python
- Генераторы в Python
- Синхронизация потоков с time.sleep()
- Использование super() в Python
- Обработка исключений в Python
- Python: цикл for и оператор присваивания
- Defaultdict в Python
- Применение функции к элементам списка
- Установка и использование Python-dateutil
- Частичное совпадение пользовательского ввода в Python 3.10
- Генерация UUID в Python
- Необязательные аргументы в Python
- Метод getitem для доступа к элементам последовательности
- Переопределение оператора % для объектов
- Глобальные переменные в Python
- Управление User-Agent в Python
- Многопоточность и асинхронное программирование в Python
- Оператор «not» в Python
- Декораторы в Python















