Курс 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"
- Метод ior для битовых операций
- Асинхронное выполнение задач в Python
- Сериализация данных в JSON с помощью json.dumps
- Создание копии итератора
- Импорт модулей и пакетов в Python
- Фильтрация списка от «ложных» значений
- Progress с библиотекой tqdm
- Метод __int__ в Python
- Реверс строки и списка в Python.
- Создание тестовых данных с Faker
- Проверка типа данных
- Сравнение строк в Python
- Сортировка с параметром key
- Оптимизация памяти с __slots__
- Отношения подклассов в Python
- Работа с очередями в Python
- Генераторы в Python
- Обработка ошибок в Python
- Проверка условий: all и any
- Переворот строки
- Декораторы с аргументами
- Виртуальные среды в Python
- Логические значения в Python
- Извлечение аудио из видео
- Определение имен функций
- Документирование функций в Python
- Структурирование данных с Pydantic
- Преобразование букв в нижний регистр
- Извлечение данных из JSON
- Работа со словарями в Python
- Тип данных TypeVarTuple
- Названия переменных
- Строки в Python: апострофы и кавычки
- Объединение словарей в Python
- Форматирование строк с % в Python
- Операторы Splat и splatty-splat
- Импорт с альтернативным именем
- Декораторы в Python
- Обработка данных в Python
- Использование html-скриптов в Jupyter Notebook
- Функциональное программирование в Python
- Функция product() из itertools
- Лямбда-функции в defaultdict
- Оператор in и not in в Python
- Проверка кортежей.
- Перегрузка операторов в Python















