Курс 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 за 14 дней
- Определение относительного пути
- Функция eval() в Python
- Функция pow() — возвести число в степень
- Создание объекта времени
- Переопределение метода __rshift__
- Работа с NumPy массивами
- Округление чисел с помощью round
- Отрицательные индексы списков
- Управление ресурсами в Python
- Философия Python
- Измерение времени выполнения кода
- Динамические маршруты во Flask
- Работа с PosixPath() в Python
- Проверка наличия элемента в списке
- Запрос пароля с помощью getpass
- Фильтрация элементов с помощью islice
- Измерение потребления памяти при сортировке
- Метод eq для сравнения объектов
- GitHub в Telegram: подписка на уведомления
- Обмен значений переменных в Python
- Названия столбцов в Python таблицах
- Циклы for в Python
- Таймер обратного отсчета
- Работа с итераторами через срезы
- Создание уникального множества
- Путь к интерпретатору Python
- Генератор списка в Python
- Параллельные вычисления в Python
- Игра «Виселица» на Python
- Асинхронное выполнение задач в Python
- Лямбда-функции для min/max
- Функция map() и ленивая оценка
- JSON в Python: модуль, dump, dumps, load
- Объединение словарей в Python
- Расширение операции побитового «и» в Python
- Создание словарей с defaultdict()
- Многострочные комментарии в Python
- Безопасный доступ к значениям словаря
- Lambda Functions in Python
- Реверс строки и списка в Python.
- UserString в Python
- Нахождение разницы между списками в Python
- Преобразование чисел в Python















