Курс 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"
- kwargs в Python
- Распаковка значений в Python
- Условные выражения в Python
- Monkey Patching в Python
- Хранение данных
- Блок try…finally в Python
- Декоратор проверки активности
- Применение функции к списку
- Тестирование с responses
- Анонимные функции в Python
- Метод сравнения объектов в Python
- Проверка подстроки в строке с помощью in
- Создание .exe файла с pyinstaller
- Итераторы с потерямиZIP
- Множественное назначение в Python
- Progress с библиотекой tqdm
- Метод rsub для пользовательских чисел
- Управление браузером с Selenium
- Concrete Paths в Python
- Удаление URL-адресов в Python
- Непрерывная проверка в Python
- Блок else в циклах Python
- Импортирование в Python
- Удаление дубликатов из списка
- Пропуск строк в файле с itertools
- Функции all() и any() в Python
- Удаление элемента из списка в Python
- Возвращение нескольких значений
- Преобразование документов в PDF с помощью Spire.Office
- Объединение списков в Python
- Циклы в Python
- Работа с URL-адресами в Python
- Модуль Operator в Python
- Работа с срезами в Numpy
- Работа с модулем cmath
- Просмотр атрибутов и методов класса
- split() — разделение строки
- Python UserString — создание подклассов строк
- Функция print() — вывод информации
- Метод join() для объединения элементов строки
- Проверка запуска скрипта или импорта модуля
- Отправка HTTP-запросов в Python
- Методы в Python
- Роль запятой в Python
- Автоматизация скриптов на AWS Lightsail.
- Вывод с переменной через запятую















