Курс 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
- Оператор «моржа» (Walrus Operator)
- Оператор * в Python
- Функция all() в Python
- Измерение времени выполнения кода
- Оптимизация гиперпараметров в Python
- Генераторы в Python
- Библиотека sh: удобные команды терминала
- Методы __repr__ и __str__ в Python
- Красивый вывод списка
- Определение наиболее частого элемента с помощью collections.Counter
- Подписка на каналы разработчиков
- Принципы программирования
- Класс-оболочка для словарей
- Подчеркивание в REPL
- Строковое представление объектов
- Возврат нескольких значений
- Использование *args
- Генераторы списков в Python
- Преобразование текста в нижний регистр
- Обработка исключений в Python
- Параллельные вычисления в Python
- Метод get для словаря
- Комментарии в Python
- Любовь к Python
- Вычисление логарифмов в Python
- split() без разделителя
- Объединение списков в Python
- Справка по импортированным модулям
- Команда %dhist — список посещенных каталогов
- Многоточие в Python
- Методы classmethod и staticmethod
- Работа с коллекциями Python
- Переопределение метода __floordiv__
- Распаковка значений в Python
- Python reversed() функция
- Замер времени выполнения кода
- Работа с эмодзи в Python
- SciPy: широкий функционал для математических операций
- Наиболее частотные элементы с помощью Counter
- Метод count() для списка















