2015-09-24 3 views
5

Warum bevorzugen die Entwickler von Python diese Syntax (Befehl)Warum ist del eine Anweisung und keine Methode in Python?

del list[index] 

über diese (Methode)?

list.del(index) 

Es scheint mir, dass del als append auf den gleichen "Kathegorie" gehört, remove, find, e.t.c. und sollte daher die gleiche Syntax haben (sei eine Methode), aber aus irgendeinem Grund haben die Ersteller von Python es als eine Anweisung implementiert. Warum haben sie das gemacht?

+0

weil Sie auch eine Klasse, eine Methode usw. (zum Beispiel in monkeypatching) delegieren können –

+0

A) 'del' hat mehr verwendet als nur Elemente aus einer' liste' zu ​​entfernen. B) Sie können Elemente aus einer 'Liste' mit dem Namen mit der Methode' remove() 'oder mit der Methode' pop() 'entfernen. Ich empfehle in Zukunft mehr Forschung zu relevanten Themen (z. B. "del", "liste"). – TigerhawkT3

+0

@ TigerhawkT3 Ja, ich habe 'pop()' vergessen, mein Fehler. Aber warum behalten sie 'del', wenn' pop() 'eine Alternative für Listen und Wörterbücher ist? –

Antwort

1

Da del ist eine Erklärung, dass Sie mehrere Dinge mit ihm löschen können, und da, wenn Sie list_name[index] mit del löschen möchten eigentlich wollen Sie ein Objekt löschen, und das ist die Aufgabe, die del für andere Objekte tut dies nicht ist müssen ein redundantes Attribut für Listen erstellen, um das zu tun!

Die Löschung wird rekursiv sehr ähnlich wie die Zuweisung definiert. Anstatt es ausführlich zu beschreiben, hier ein paar Hinweise.

Das Löschen einer Zielliste löscht jedes Ziel rekursiv von links nach rechts.

Durch das Löschen eines Namens wird die Bindung dieses Namens aus dem lokalen oder globalen Namespace entfernt, je nachdem, ob der Name in einer globalen Anweisung im selben Codeblock auftritt. Wenn der Name nicht gebunden ist, wird eine NameError-Ausnahme ausgelöst.

Löschen von Attributreferenzen, Subskriptionen und Slicings wird an das primäre Objekt übergeben; Das Löschen eines Slicings entspricht im Allgemeinen der Zuweisung eines leeren Slices vom richtigen Typ (aber selbst dies wird durch das geschnittene Objekt bestimmt).

+1

Jetzt kann ich sehen, dass 'del' nicht nur Elemente von Listen oder Wörterbüchern löschen kann, sondern auch beliebige Objekte. Solange Elemente von Listen und Wörterbüchern Objekte sind, hat es keinen Sinn, weitere Möglichkeiten zum Löschen eines Elements hinzuzufügen. Vielen Dank. –

+0

@IlyaPeterov Ja, in der Tat! und willkommen! – Kasramvd

+0

Bessere Frage ist, warum gibt es eine 'del' Anweisung anstelle einer' delete' eingebauten Funktion? –

Verwandte Themen