Bislang haben wir eine Reihe von Datenstrukturen in Python gesehen: strings und Listen. Jede von ihnen unterstützt mehrere Methoden, die Varianten von Funktionen sind.
Zum Beispiel ist eine Methode von Listen
die reverse()
Methode. Wie der Name schon andeutet, kehrt sie die Liste um (so wird aus dem ersten Element das letzte und umgekehrt). Man ruft eine Methode auf, in dem man ein Periodenzeichen (.
) verwendet wie im Folgenden:
«objectName».«methodName»(«list of arguments, if any»)
Zum Vergleich, die Syntax, die wir bereits gesehen haben, um Funktionen aufzurufen, war
«functionName»(«list of arguments, if any»)
Hier ist ein Beispiel für das Aufrufen der Umkehr
-Methode in einer Liste.
Ein Beispiel einer Methode, die ein Argument benötigt, ist str.startswith
:
Viele Methoden
Unten erwähnen wir die häufigsten Methoden für die Zeichenketten- und Listenklassen. Diese erledigen zumeist Aufgaben, die du selbst zu schreiben in der Lage sein solltest, aber das Verwenden von Standardmethoden hat den Vorteil, dass es deinen Code leichter für andere zu lesen und zu bearbeiten macht.
Listen
Diese Methoden verändern die Liste nicht:
list.index(X)
: findeX
in der Liste. Genauer gesagt, gibt diese Methode eini
aus, daslist[i]==X
ergibt, wenn man alle Elemente durchsucht. Das niedrigst möglichei
wird ausgegeben. WennX
nicht in der Liste vorhanden ist, wirdValueError
ausgelöst.X in list
gibtTrue
aus, wennX
ein Element der Liste ist, sonstFalse
. Diese Methode zu verwenden kann helfen, einenValueError
zu vermeiden. (Achtung:in
ist ein Operator, keine Methode.)
list.count(X)
: gibt aus, wie oftX
in der Liste vorkommt
Diese Methoden verändern die Liste:
list.append(X)
fügtX
am Ende vonlist
einlist.insert(i, X)
fügtX
an der Stellei
einlist.extend(L)
fügt eine ListeL
an das Ende anlist.remove(X)
entfernt das erste Auftreten vonX
list.pop(i)
löscht & gibt Elementlist[i]
zurück, währendlist.pop()
das letzte Element löscht & zurückgibt.del list[i]
löscht dasi
te Element vonlist
(Achtung: dies ist ein "del Statement", keine Methode)list.reverse()
kehrt die Liste umlist.sort()
sortiert die Liste
Alle Methoden oben außer pop
geben None
aus. Einige dieser Funktionen können außerdem auch mit leicht veränderten Argumenten aufgerufen werden; für mehr Details siehe den Abschnitt über Listenmethoden in der Python Dokumentation. Listen unterstützen auch komplexe Unterbereiche, die „slices“ genannt werden, und die es uns erlauben, ganze Unterlisten einzufügen oder zu löschen, ähnlich wie in der string[x:y:z]
Schreibweise, die wir in vorherigen Lektionen gesehen haben.
Zeichenketten
Genau wie bei Listen, kannst du in
,index
und count
mit Zeichenketten verwenden. Sie sind sogar noch wirkungsvoller, da sie auch mit Unterketten funktionieren und nicht nur individuelle Zeichen finden:
S in T
ist ein bool, der angibt, ob KetteS
eine Unterkette von KetteT
ist.S.index(T)
findet den ersten Index vonS
, woT
eine Unterkette istS.count(T)
gibt die Zahl von sich nicht überschneidenden Ausprägungen vonT
an als Unterkette vonS
Hier sind einige der allgemein hilfreichsten str
Methoden:
- Groß- und Kleinschreibung:
capitalize, lower, upper, islower, isupper
- Zeichen:
isalpha, isdigit
- Füllung:
center, ljust, rjust
;strip
löschen Füllzeichen - Unterketten:
endswith, startswith, find, replace
- Parsing:
split, splitlines
Wir werden diese detaillierter einführen, sofern dies notwendig ist. Eine komplette, detaillierte Liste von Zeichenkettenmethoden findest du in der Python Dokumentation.
Strings sind unveränderlich. Wir erwähnten list.reverse()
, welches eine Liste verändert, indem es sie umkehrt, aber es existiert keine str.reverse()
Methode. Das ist so, weil Zeichenkettenobjekte nicht mehr verändert werden können, wenn sie einmal entworfen wurden. In Lektion 17 erklären wir dies etwas genauer.
Hier ist ein Beispiel einer Kettenmethode: S.replace(old, new)
gibt eine modifizierte Version von S
aus, bei der jedes Vorkommen von Unterkette old
ersetzt wurde durch new
. Dies ruft eine neue Kette hervor, ohne die alte zu verändern:
Für die nächste Übung sind die folgenden Methoden hilfreich:
str.replace
, die wir gerade beschrieben haben- die Boolesche Methode
str.isalpha()
, dieTrue
ergibt, wennstr
eine Kette (oder Zeichen) ist, die nur aus Buchstaben besteht - die Boolesche Methode
str.isdigit()
, dieTrue
ergibt, wennstr
eine Kette (oder Zeichen) ist, die nur aus Zahlen besteht str.upper()
, die eine Version vonstr
ausgibt, die zu Großbuchstaben konvertiert wurde.
Der Rest dieser Lektion ist ein bisschen technisch und kein nötiges Wissen für die restlichen Lektionen. |
Mehr über Objekte
Während du mehr über Python lernst, wirst du mehreren Klassen als nur strings und Listen begegnen.
Andere, die du wohl nützlich finden wirst, sind file objects, sets, und dictionaries.
Sie haben alle viele nützliche Methoden. Du kannst Python nach allen Methoden eines gegebenen Objektes fragen,
indem du die dir
-Funktion anwendest:
Die Eigenschaften eines Objekts anzuschauen wird introspection genannt. Alles in Python darf Methoden haben:
Einige der Einträge in dir
sind eigentlich member variables statt Methoden, zum Beispiel ist int.denominator
eine Zahl und keine Funktion. Technisch sind Funktionen Objekte in Python, so sind member-Funktionen ein Spezialfall von member-Variablen.
Du kannst Introspektion auch an Modulen betreiben. Falls du import math
durchführst und dann dir(math)
aufrufst, bekommst du eine Liste von allem im math
-Modul, die Zahl pi
und die Funktion sqrt
inklusive.
Warum Objekte?
Warum haben wir Methoden wie S.index(T)
anstatt eines einfachen Funktionsaufrufs wie index(S, T)
? Warum haben wir eigentlich überhaupt object S
und method str.index()
?
Die wesentlichen Vorteile der Objekte werden klarer, wenn du anfängst mit komplizierteren und
unterschiedlicheren Typen von Daten zu programmieren. Jeder Typ vom Objekt (z.B. str
class)
stellt die untergebrachten Basisdaten (z.B. eine Folge von Zeichen und ihre Länge)
und die Typen der Operationen dar, welche daran ausgeführt werden können (z.B. konvertieren zum Großbuchstaben oder einen substring erstellen).
Ein komplexeres Beispiel sind file objects:
sie repräsentieren den Namen eines zu öffnenden Files, deine aktuelle Position im File und Methoden zum Lesen und Schreiben.
Du kannst sogar deine eigenen Datentypen definieren!
Dieser allgemeine Zugang wird "objektorientierte Programmierung" (OOP) genannt. Einige seiner Leistungen sind:
- organization: Auf alles vom
math
-Modul kann mit dermath.«name»
-Syntax zugegriffen werden; du sparst die Möglichkeit, existierende Variablennamen in deinem Programm zu überschreiben. - encapsulation:
So wie ein Programm mit mehreren strings oder mehreren Files zur gleichen Zeit arbeiten kann, kannst du mit vielen verschiedenen Kopien (instances) des durch irgendeine andere Klasse definierten Datentypen arbeiten. - re-use: Sobald du einen Datentypen (wie
str
) oder eine Library von Methoden (wiemath
) definiert hast, kannst du ihn wieder und wieder benutzen (re-use) oder ihn anderen Leuten vom benutzen geben. - debugging:
Wir sahen von früher, wie das Schreiben einer Funktion den Gebrauch vieler Kopien gleichen Codes vermeidet,
was debugging erleichtert. Alle Funktionen verknüpft mit einem Datentypen an einer einzigen Stelle (die Klassendefinition) zu schreiben hat den gleichen Effekt. - relations between classes: Python weiß, dass die
index
-Methode eine Sache für einen string und was anderes für eine Liste bedeuten kann. Ebenso kann Python nicht nur Files auf deinem Computer lesen und schreiben, sondern auch auf dem Internet. In beiden Fällen (Zeichen oder Listenfolgen und lokale oder ferne Files) können die verwandten Klassen durch das Konzept der Vererbung (inheritance) in einer gleichförmigen Weise behandelt werden.
Im Rest der CS Kreise werden wir nur Objekte und Methoden benutzen; du kannst später mehr über
das Erstellen eigener Klassen lernen (siehe Ressourcen-Seite).
Die nächsten drei Lektionen können in beliebiger Reihenfolge durchgearbeitet werden und sie geben eine Vielfalt von Herausforderungen, die teilweise Themen von früheren Lektionen beinhalten.