Курс Python → Избегайте пустого списка
Пустой список нельзя использовать как аргумент по умолчанию в Python из-за того, что значения по умолчанию для аргументов функции вычисляются только один раз, при определении функции. Если вы попытаетесь использовать пустой список в качестве значения по умолчанию для аргумента функции, то он будет создан при определении функции и будет ссылаться на один и тот же объект в памяти каждый раз, когда функция вызывается.
Это означает, что если внутри функции изменяется пустой список, то изменение будет сохранено в этом списке для всех последующих вызовов функции, так как все они будут использовать один и тот же объект списка. Это может привести к неожиданным и нежелательным результатам, так как изменение списка в одном вызове функции может повлиять на другие вызовы, которые рассчитывают на неизменность значения по умолчанию.
Чтобы избежать подобных проблем, рекомендуется использовать в качестве значения по умолчанию неизменяемые объекты, такие как None, числа или строки. Если необходимо использовать изменяемый объект, то лучше создавать его внутри функции, чтобы каждый вызов функции работал с отдельным экземпляром объекта и не влиял на другие вызовы.
def my_function(my_list=None):
if my_list is None:
my_list = []
my_list.append("element")
print(my_list)
my_function() # ["element"]
my_function() # ["element"] (не изменяет значение по умолчанию)
В приведенном примере использовано None как значение по умолчанию для аргумента функции, и внутри функции создается новый пустой список, если аргумент не был передан. Это позволяет избежать проблем с изменяемыми объектами и гарантирует, что каждый вызов функции работает с отдельным списком, не влияя на другие вызовы.
Другие уроки курса "Python"
- Повторение и перенос строки
- Enum в Python
- Преобразование текста в нижний регистр
- Копирование списков в Python
- Создание словарей и множеств в Python.
- Игра «Виселица» на Python
- Оператор Walrus: правильное использование
- Безопасный доступ к значениям словаря
- Декораторы в Python
- Множественное присваивание в Python
- Запуск внешнего кода в Jupyter
- Замена символов в Python
- Замена атрибута в именованном кортеже
- Создание итерируемых объектов
- Метод remove() для удаления элемента из списка
- Проверка памяти объекта
- Counter() — подсчет элементов
- Создание новых функций с помощью functools.partial
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Копирование в Python
- Обработка элементов в Python
- Вывод с переменной через запятую
- Уникальность ключей в словаре
- Динамическая типизация в Python
- Логирование в Python
- Генерация случайных данных в NumPy
- Работа с zip-архивами в Python
- Поиск частых элементов в списке
- Декораторы в Python
- Очистка данных в Python
- Получение размера объекта с sys.getsizeof()
- Автоматизация с Python
- Декораторы в Python
- Измерение времени выполнения с помощью time
- Преобразование списков в словарь
- Возвращение нескольких значений
- GitHub в Telegram: подписка на уведомления
- Реверс строки в Python
- Необязательные аргументы в Python
- Работа с argparse
- Python и Монти Пайтон
- Оператор обр. импликации
- Работа с типами данных в Python с помощью pydantic.
- Работа с itertools
- Манипуляция формой массива в Numpy
- Возвращение нескольких значений через кортеж или класс















