Веб-версияОткрыть в Telegram

ПостИнструкция del (от англ. delete), как можно понять из названия, нужна чтобы что-то удалять, а именно имена переменных, а…

30 июня 2022
P
Python RU
Инструкция del (от англ. delete), как можно понять из названия, нужна чтобы что-то удалять, а именно имена переменных, атрибуты объектов, элементы списков и ключи словарей. 1. Удаление элемента из списка по индексу: >>> x = [1, 2, 3, 4, 5] >>> del x[2] >>> x [1, 2, 4, 5] Также можно удалять по срезам. Пример: удаление первых двух элементов: >>> x = [1, 2, 3, 4, 5] >>> del x[:2] >>> x [3, 4, 5] Удаление последних n элементов: del x[n:]. Удаление элементов с четными индексами: del x[::2], нечетными: del x[1::2]. Удаление произвольного среза: del x[i:j:k]. Не путайте del x[2] и x.remove(2). Первый удаляет по индексу (нумерация с 0), а второй по значению, то есть находит в списке первую двойку и удаляет ее. 2. Удаление ключа из словаря. Просто: >>> d = {"foo": 5, "bar": 8} >>> del d["foo"] >>> d {'bar': 8} А вот строки, байты и сеты del не поддерживают. 3. Удаление атрибута объекта. class Foo: def __init__(self): self.var = 10 f = Foo() del f.var print(f.var) # ошибка! Примечание: можно через del удалить метод у самого класса (del Foo.method), но нельзя удалить метод у экземпляра класса (del Foo().method - AttributeError). 4. Что значит удалить имя переменной? Это просто значит, что надо отвязать имя от объекта (при этом если на объект никто более не ссылается, то он будет освобожден сборщиком мусора), а само имя станет свободно. При попытке доступа к этому имени после удаления будет NameError, пока ему снова не будет что-то присвоено. >>> a = 5 >>> del a >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined Здесь кроется один нюанс. Если переменная была внутри функции помечена, как global, то после ее удаления глобальная переменная никуда не денется, а имя освободится лишь в зоне видимости функции. Причем если мы снова присвоим ей значение, то она опять окажется глобальной, т.е. del не очищает информацию о global! g = 100 def f(): global g g = 200 del g # g останется вне фукции g = 300 # таже самая глобальная g f() print(g) # 300 Чтобы реально удалить глобальную переменную, можно сделать так: del globals()['g']. В пунктах 1, 2, 3 в качестве имен могут фигурировать выражения и ссылки, так как операции идут над содержимым объектов, а в пункте 4 должно быть строго формальное имя удаляемого объекта. >>> x = [1, 2, 3] >>> y = x >>> del y # удаляет именно y, но x остается @pro_python_code
👍21❤2
17 · 2.5K ·

Рядом в ленте

PPython RUФотографияPPython RUОпрос
это сообщение
PPython RU✅ Список полезных ресурсов для Python разработчика @pythonl - продвинутый Python @ai_machinelearning_big_data - машинное обучение @data_analysis_ml - анализ данPPython RU🗣️ Решаем задачу перевода русской речи в текст с помощью Python и библиотеки Vosk https://proglib.io/p/reshaem-zadachu-perevoda-russkoy-rechi-v-tekst-s-pomoshch

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем