Курс Python → Проблема с изменяемыми аргументами
При написании функций в Python, одной из распространенных проблем является использование изменяемых типов данных в качестве аргументов по умолчанию. Это может привести к непредвиденным результатам, так как Python вычисляет значения по умолчанию для изменяемых типов только один раз — при создании функции. При последующих вызовах функции значение по умолчанию уже будет инициализировано и не будет изменяться.
Это означает, что если в функции вы используете изменяемый тип данных, например список или словарь, в качестве значения по умолчанию для аргумента, то при каждом последующем вызове функции это значение будет уже изменено и не будет соответствовать ожидаемому поведению.
Для избежания подобных проблем важно помнить, что при использовании изменяемых типов данных в аргументах по умолчанию, лучше инициализировать их внутри функции, а не при объявлении самой функции. Таким образом, каждый раз при вызове функции будет создаваться новый объект изменяемого типа данных и не будет конфликтов с предыдущими значениями.
def example_function(my_list=[]):
my_list.append(1)
return my_list
print(example_function()) # [1]
print(example_function()) # [1, 1]
В данном примере функция example_function использует список в качестве аргумента по умолчанию. При первом вызове функции список будет содержать один элемент [1]. Однако, при последующем вызове функции, список уже будет содержать два элемента [1, 1], так как значение по умолчанию изменилось после первого вызова.
Другие уроки курса "Python"
- Делегирование в Python
- Определение имен функций
- Переворот списка в Python
- Группировка элементов в словарь
- Отправка POST-запроса в REST API
- Форматирование строк в Python
- Изменяемые и неизменяемые объекты
- Модуль os в Python: работа с файлами
- Работа с модулем glob в Python
- Beautiful Soup — извлечение данных из HTML
- Профилирование кода на Python
- Обработка исключений с блоком else
- Функции в одну строку
- Объединение словарей в Python
- Синхронизация доступа к ресурсам
- Хешируемые ключи в Python
- Преобразование Excel в PDF с Spire.XLS
- Транспонирование 2D-массива с помощью zip
- Логирование с Logzero
- Возврат нескольких значений
- Объединение словарей в Python
- Установка и использование Telegram API в Python
- Сортировка данных с лямбда-функциями
- Список импортированных модулей в Python
- Работа с временем в Python
- Имена объектов в Python
- Блок else в циклах.
- Логические значения в Python
- Решатель судоку на Python с pygame
- Библиотека Rich: форматирование текста
- Хранение данных
- Отправка POST запроса на сервер.
- Работа с модулем os в Python
- Изменение переменной в Python: nonlocal
- Округление банкира в Python
- Закрытие файла в Python
- Печать календаря
- Преобразование в float
- Работа с deque из collections
- Удаление эмодзи с помощью pandas
- Бесконечная проверка в Python
- Лямбда-функции в цикле
- Оператор «not» в Python
- Взаимодействие с sys
- Установка и использование howdoi
- Декоратор Ajax required
- Выражения-генераторы в Python
- Принципы LSP и ISP в Python
- Создание объекта времени















