Курс 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
- Делегирование в Python
- Декораторы в Python
- Проверка надежности пароля на Python
- Оператор «not» в Python
- Работа с YAML в Python
- Срез в Python
- Создание Radio кнопок в tkinter
- Перебор элементов списка в Python
- Работа с модулем cmath
- Срез списка в Python
- Сравнение строк в Python
- Оператор «is not» в Python
- Работа с типами данных в Python с помощью pydantic.
- Пустой оператор pass в Python
- Создание новых списков
- Избегайте изменяемых аргументов
- Метод сравнения объектов в Python
- Эффективная конкатенация строк в Python
- Сравнение def и lambda функций в Python
- Возврат нескольких значений из функции
- Фильтрация последовательности
- Поиск всех индексов подстроки
- Метод repr() в Python
- capitalize() — изменение регистра первого символа строки
- Методы list в Python
- Оператор «or» в Python
- Сумма элементов списка
- Работа с байтовыми строками в Python
- Поиск анаграмм с Counter
- Разработка игры Pong с turtle
- Заказ карты Тинькофф Black
- Оператор «моржа» (Walrus Operator)
- Обработка StopIteration в Python
- Форматирование даты с strftime()
- HTTP-запросы с библиотекой Requests
- Класс-оболочка для словарей
- Нахождение отличий в списках
- Присоединение элементов коллекции
- Удаление дубликатов из списка
- Многострочные комментарии в Python
- Управление доступом к модулю
- Создание OrderedDict
- Преобразование символов в нижний регистр
- Измерение времени выполнения кода
- Непрерывная проверка в Python















