Курс 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
- Работа с Enum в Python3.
- Подсчет элементов в списке с Counter
- Оператор assert в Python
- Методы и функции в Python
- Проверка ввода с помощью isdigit
- Работа с файлами в Python
- Функция zip() в Python
- Работа с многоуровневыми словарями в Python
- Создание списка через цикл
- Лямбда-функции в Python
- Однострочники Python
- Подписка на @SelectelNews
- Python Метод sleep() времени
- Метод lt для сортировки объектов
- Проекты на Python
- Работа с кортежами в Python
- Перевод текста с Python Translator
- Преобразование в float
- Создание и операции с дробями
- Отделение звука от видео
- Работа со строками в Python.
- Вычисление натуральных логарифмов в NumPy
- Разбиение текста в Python
- Избегание изменяемых аргументов
- Обработка исключения UnboundLocalError
- Получение комбинаций в Python
- Конкатенация строковых литералов
- Модуль itertools: комбинации и перестановки
- Генераторы в Python
- Метод rsub для пользовательских чисел
- Работа с файловой системой в Python
- Реализация метода __abs__ в Python
- Объединение словарей в Python
- Изучение объектов с помощью dir()
- Расчет времени выполнения кода
- None в Python: использование и особенности
- Python enumerate() использование
- Получение идентификатора объекта в памяти
- Частичное совпадение пользовательского ввода в Python 3.10
- Списковое включение в Python
- Метод join() для объединения элементов строки
- Работа с CSV файлами
- Парсинг веб-страниц с Beautiful Soup
- Установка Python — Простое руководство
- Сумма элементов списка
- Метод title() в Python















