Курс 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
- Преобразование списков в словарь
- split() без разделителя
- Pillow: работа с изображениями
- Combobox в Tkinter
- Модуль Antigravity в Python 3
- Частичное применение функций в Python
- Декоратор защиты анонимных пользователей
- Избегайте изменяемых аргументов
- Библиотека Chartify: руководство
- Декораторы в Python
- Метод Self в Python
- Отправка POST-запроса в REST API
- Управление контекстом выполнения кода
- Удаление ключа из словаря в Python
- Замеры производительности в Python
- Генерация фальшивых данных с Faker
- Расчет времени выполнения
- Повторение и перенос строки
- Получение значений из словарей
- Мониторинг работы программы Py-spy
- Работа с deque в Python
- Проверка ввода с помощью isdigit
- 9 уловок для чистого кода
- Обмен переменными в Jupyter
- Обратный список чисел
- Оптимизация гиперпараметров в Python
- Генераторы в Python
- Применение функции к каждому элементу списка
- Логирование в Python
- Функция divmod() в Python
- Динамическая типизация в Python
- Конкатенация строк с join() в Python
- Измерение времени выполнения с помощью time
- Лямбда-функции в Python
- Импорт модулей в Python 3.12
- Python Enumerate
- Beautiful Soup — извлечение данных из HTML
- Работа с файлами в Python
- Работа с типами данных в Python с помощью pydantic.
- Генерация UUID в Python
- Использование функции enumerate()
- Поиск подстроки в строке
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Принципы Zen Python
- Вывод букв строки в Python
- Оператор is в Python
- Работа с GitHub в Telegram















