Курс 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
- Конвертация текстовых чисел с помощью Numerizer
- Таймер обратного отсчета
- Декораторы с @wraps
- Значения по умолчанию в Python
- Красивый вывод списка
- Добавление элементов в список: append() vs extend()
- Monkey Patching в Python
- Строки в Python: апострофы и кавычки
- Создание треугольника Паскаля
- Метод __ilshift__ для битового сдвига влево
- Удаление элементов из списка в Python
- Работа с аргументами командной строки
- Аннотации типов в Python
- Установка и использование Telegram API в Python
- 9 уловок для чистого кода
- Проверка ввода с помощью isdigit
- Создание пар из последовательностей
- Работа с кортежами
- Отладка регулярных выражений в Python
- Определение функций с необязательными аргументами
- Оператор space-invader
- Отслеживание выполнения программы с библиотекой tqdm
- Передача аргументов в Python
- Глобальные переменные в Python
- Defaultdict в Python
- Создание namedtuple из словаря
- Копирование в Python
- Генераторы данных
- Именованные кортежи в Python
- Условные выражения в Python
- Переименование файлов в Python
- Атрибуты класса и экземпляра
- Метод remove() для удаления элемента из списка
- Показ всплывающих окон Tkinter
- Создание копии итератора
- Многопоточность и асинхронное программирование в Python
- Названия столбцов в Python таблицах
- Применение функции к списку
- Склеивание строк через метод join()
- JMESPath в Python
- Сортировка и обратный порядок
- Оператор Walrus: правильное использование
- Использование функции enumerate()
- Сравнение def и lambda в Python
- Нахождение пересечения множеств















