Курс 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
- Метод invert для побитового отрицания
- TypedDict для kwargs в Python 3.12
- kwargs в Python
- Объединение строк с помощью метода join
- Списковое включение в Python
- Работа с файлами в Python
- Создание списка через итерацию
- Цикл while в Python
- Списки в Python
- Печать календаря
- Игра Виселица на Python
- Объединение списков в Python
- Установка и использование howdoi
- Работа с необработанными строками
- Работа с контекст-менеджером «with»
- Транспонирование 2D-массива с помощью zip
- Декоратор @override
- Условное добавление элементов в список
- Установка и использование модуля Wikipedia
- Модуль functools в Python
- Удаление файлов с shutil.os.remove()
- Объединение списков в Python
- Тернарный оператор в Python
- Вычисление натурального логарифма в NumPy
- Проверка на палиндром
- Форматирование строк в Python
- Оператор zip в Python
- Python 3.12: Псевдонимы типов
- Повторение элементов в Python
- Создание и обучение модели с Keras
- Добавление Progressbar в Python
- Операторы Splat и splatty-splat
- Метод split() для разделения строк
- Обновление шаблона base.html
- Генераторы данных
- Обработка ошибок в Python
- Вывод сложных структур данных с помощью pprint
- Вложенные циклы в Python
- Создание новых функций через partial
- Метод join() для объединения элементов в строку.
- Аннотации типов в Python
- Объединение множеств в Python
- Работа с модулем random
- Потоковый ввод в Python
- Метод setitem в Python















