Курс 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.
- Функция reduce() в Python
- Шаблоны Flask: условия и циклы
- Возведение в квадрат с помощью itertools
- Работа с базами данных SQLite
- Обработка ошибок в Python
- Мощь вложенных функций в Python
- Сортировка в Python
- Метод __getitem__ в Python
- Стать Python-разработчиком
- История Python
- Создание функций высшего порядка
- Поиск кода
- Подсчет элементов в списке с Counter
- Ошибка NotImplemented в Python
- Измерение времени выполнения кода
- Пропуск начальных строк с помощью dropwhile()
- Удаление элементов во время итерации
- Concrete Paths в Python
- GitHub в Telegram: подписка на уведомления
- Установка и использование Logzero
- Перегрузка операторов в Python
- Проверка дубликатов в Python
- Работа с датой и временем в Python
- Генерация QR-кодов с библиотекой qrcode
- Фильтрация данных в Python.
- Обход словаря в Python
- Получение пути к текущему скрипту с помощью os
- Методы в Python
- Удаление дубликатов с помощью множеств
- Удаление элемента по индексу в Python
- Моржовый оператор в Python 3.8
- Использование обратной косой черты в f-строках
- Сравнение строк в Python
- Циклы for в Python
- Автоматизация скриптов на AWS Lightsail.
- Разделение строки с помощью re.split()
- Перевод текста с Python Translator
- Утечки переменных цикла в Python 3.x
- Форматирование строк с помощью f-строк
- Модуль array: создание и использование массивов
- Метод ifloordiv для пользовательских классов
- Переменная с нижним подчеркиванием















