Курс 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"
- Antigravity модуль
- Работа со строками в Python
- Функция с **kwargs в Python
- Шаблоны Flask: условия и циклы
- Работа с контекстными менеджерами
- Работа с Telegram API на Python
- Отладка производительности Python
- Встроенные функции Python
- Оператор @ для умножения матриц
- Метод join() для объединения элементов строки
- Проверка строки на палиндром
- Numpy: разбиение массивов
- Фильтрация последовательности
- Метод invert для побитового отрицания
- Работа с комплексными числами
- Очистка данных с помощью pandas
- Работа с модулем cmath
- Работа с CSV файлами в Python
- Автоматизация с Python
- Основные функции и модули Python
- Проверка элементов списка условием
- Работа с файлами и директориями в Python.
- Нахождение самого длинного слова в списке с помощью max
- Сортировка с параметром key
- Solidity для DeFi Ethereum
- Обработка ошибок в Python
- Комментарии в Python
- Работа с getopt
- Перезагрузка оператора в Python
- Избегайте ошибку FileNotFoundError
- Декораторы в Python
- Экранирование символов в Python
- Генераторы списков
- Оператор match в Python
- Pillow: работа с изображениями
- Модуль math: основные функции
- Поиск элементов BeautifulSoup
- Расчет времени выполнения
- capitalize() — изменение регистра первого символа строки
- Применение функции к списку
- Извлечение статей с newspaper3k
- Структуры данных в Python
- Добавление Progressbar в Python
- Выключение компьютера с помощью Python
- Concrete Paths в Python
- Модуль itertools: комбинации и перестановки















