Курс 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"
- Оператор += в Python
- Отладка в Python
- Модуль future Python
- Оператор * в Python
- Создание и использование модулей в Python
- Комментарии в Python
- UserList в Python: Описание и примеры использования
- Создание обратного итератора
- Создание треугольника Паскаля
- Сортировка в Python
- Работа с Event() в threading
- Построение графиков в терминале с bashplotlib
- Реализация метода __abs__ в Python
- Переопределение метода __or__()
- Функция product() из itertools
- Экспорт данных в файл.
- Создание GUI с Tkinter: Entry
- Кортеж в Python: создание, доступ, изменение
- Управление ресурсами с контекстными менеджерами
- Библиотека Rich: форматирование текста
- Определение локальных переменных в Python
- Bootle — простой веб-фреймворк
- Абстракции словарей и множеств в Python
- Разделение строки в Python
- Метод rmatmul для обратного матричного умножения
- Улучшение читаемости кода в Python
- Генераторы в Python
- Python Менеджер контекста
- Синхронизация потоков с time.sleep()
- Декораторы в Python
- Работа с утверждениями в Python
- Лямбда-функции в defaultdict
- Удаление дубликатов из списка
- Расчет времени выполнения программы
- Преобразование кортежа в словарь.
- Установка Home Assistant
- Анонимные функции Lambda
- Преобразование регистра символов
- Декораторы классов
- Методы list в Python
- Генерация чисел с range()
- Повторение элементов в Python
- Работа с комбинациями в Python.
- 9 уловок для чистого кода
- Подсказки при вводе данных в Python
- Реверс строки в Python
- Создание новых списков в Python















