Python-Programmierung: Sprachkonstrukte

Aus Wikibooks

Wechseln zu: Navigation, Suche
Nuvola apps bookcase.svg Programmiersprachen Nuvola apps bookcase 1.svg PythonNuvola mimetypes dvi.png Sprachkonstrukte


Wie jede andere Sprache auch, verlangt Python die Einhaltung einer formalen Syntax. Um ein gut lesbares, wartbares und übersichtliches Pythonprogramm schreiben zu können, sind einige wenige elementare Regeln zu beachten, die in diesem Kapitel näher erörtert werden sollen.

Inhaltsverzeichnis

[Bearbeiten] Formatierung

Programme gewinnen durch eine geeignete Formatierung an Übersichtlichkeit. So lassen sich durch Leerzeilen zusammenhängende Gruppen von Anweisungen kenntliche machen. Python erlaubt an jeder beliebigen Stelle die Leerzeilen einzufügen. Als Leerzeile gilt jede Zeile, die keine sichtbaren Zeichen enthält. Solche Zeilen werden grundsätzlich ignoriert, sofern sie nicht Teil einer Zeichenkette (siehe "Zeichenketten" weiter unten) sind.

[Bearbeiten] Kommentare

Ein weiteres wichtiges Werkzeug sind Kommentare. Sie können an beliebiger Stelle in einem Programm erscheinen und sie werden durch das Doppelkreuz # eingeleitet. Der folgende Text bis zum Zeilenende wird bei der Abarbeitung eines Programmes ignoriert.

>>> # dies ist ein Kommentar
 
>>> 1 # Ein Kommentar hinter einem Zeichen
 1

[Bearbeiten] Einrückungen und Blöcke

In einer Eigenschaft unterscheidet sich Python signifikant von anderen Programmiersprachen, nämliche in der Art wie es mit Einrückungen umgeht. In Sprachen, wie C, Java oder auch Perl dient die Einrückung von Anweisungen der Kenntlichmachung von Programmblöcken:

int i, quadrat;
 
for (i = 0; i < 10; i++) {
    quadrat = i * i;
    printf ("%d*%d = %d", i, i, quadrat);
}

Diese Einrückung ist aber nicht verbindlich und auch nicht Bestandteil der Syntax. Die Blöcke werde durch terminale Symbole, wie den paarweise geschweiften Klammern in C oder Perl gebildet. In Python entsteht ein Block durch die Einrückung. Zeilen auf gleicher Höhe bilden einen zusammenhängenden Block. Das C-Beispiel in Python sähe danach so aus:

for i in range(10):
    quadrat = i * i
    print "%d*%d = %d" % (i, i, quadrat)

Zum Einrücken ist sowohl der Leerschritt (Space) als auch das Tabulatorzeichen (Tab) erlaubt, allerdings sollte man sich davor hüten, beides miteinander zu mischen und sich strickt für ein Zeichen entscheiden. Die Einrücktiefe ist nicht vorgegeben. Üblich sind Werte von 2, 4 und 8 Zeichen. Auch hier gilt, sich an eine einmal gewählte Tiefe zu halten und nicht zu mischen. Für welche man sich entscheidet, hängt sehr von den eigenen Vorlieben, es gibt für jede Tiefe gut Argumente. Während eine Einrückung von 2 oder 4 Zeichen auch sehr komplexe Blockstrukturen erlaubt, bei denen man bei eine Tiefe von 8 schnell an das Ende der Zeile gerät, zwingt eine Schrittweite von 8 den Code einfach zu halten. Der Python Enhancement Proposals (PEP) Nummer 8 - Style Guide for Python Code - empfiehlt dringend eine Einrücktiefe von 4 Leerzeichen zu verwenden.

Aufmerksamen Lesern wird ein weiterer Unterschied aufgefallen sein. Dem Pythoncode fehlen die Semikola am Ende der Anweisungen. Sie sind unnötig. In Python endet eine Anweisung mit dem Ende der Zeile. Obwohl es erlaubt ist, mehrere, durch Semikola getrennte Anweisungen auf eine Zeile zu schreiben, gilt dies gemeinhin als schlechter Stil.

Ein guter, aber vor allem konsistent gepflegter Kodierstil hilft Fehler zu vermeiden und sollte nicht unterschätzt werden. Programme, wie Pylint können dabei helfen und sind sehr zu empfehlen.

[Bearbeiten] Literale und eingebaute Werte

Direkt im Quellcode verwendete Zahlen oder Zeichenketten werden Literale genannt. Sie stehen für konstante Werte. Python unterstützt Literale für Zeichenketten, ganze Zahlen, Fließpunkt- und komplexe Zahlen, wobei vielfältige Notationen (oktal, hexadezimal, dezimal etc.) möglich sind.

Neben den Literalen existieren in Python auch eingebaute Werte, wie die Wahrheitswerte oder der Nullwert (None).

[Bearbeiten] Wahrheitswerte

Wahrheitswerte sind das Ergebnis logischer Ausdrücke, also z.B. von Vergleichen. Es gibt genau zwei solche Werte: True für wahr und False für falsch.

>>> 1 > 2
False

>>> 2 > 1
True

>>> type(True)
<type 'bool'>

>>> type(False)
<type 'bool'>

[Bearbeiten] Zahlen

Es gibt vier Arten von Zahlen in Python:

[Bearbeiten] Beispiele

>>> 1 # Eine ganze Zahl
1
>>> 1.0 # Eine Fließpunktzahl
1.0
>>> 0x7ff # Ein hexadezimale Zahl (zur Basis 16)
2047
>>> 11223344556677889900 # Eine Long-Zahl
11223344556677889900L
>>> 077 # Oktale Zahlen (Zur Basis 8)
63

[Bearbeiten] Zeichenketten

Eine Zeichenkette (engl. String) besteht aus Zeichen. Zeichenketten werden durch einfache Apostrophe, doppelte ("Gänsefüßchen") oder dreifache Anführungszeichen begrenzt, wie hier:

>>> 'abc' # Apostroph
'abc'
>>> "die Katze" # Gänsefüßchen
'die Katze'
>>> """lief
... im Schnee"""
'lief\nim Schnee'

Die Besonderheit bei dreifachen Anführungszeichen ist, dass eine Zeichenkette mehrere Zeilen umfassen kann. Als Begrenzung können sowohl dreifache Apostrophe als auch dreifache Anführungszeichen benutzt werden.

[Bearbeiten] Sonderzeichen

Je nach landessprachlicher Einstellung können Umlaute verwendet werden:

>>> "öäü"
'\xc3\xb6\xc3\xa4\xc3\xbc'
>>> print "öäü"
öäü

In Zeichenketten kann man Steuerzeichen wie Tabulatoren und Zeilenumbrüche mit einer speziellen Schreibweise angeben, die der Programmiersprache C entlehnt ist. Einige dieser Zeichen sind eher von historischer Bedeutung, da sie urprünglich zur Steuerung von Terminals dienten.

\Zeilenende Kein Effekt
\\ Schrägstrich rückwärts
\a Steuerzeichen BEL (Tonsignal)
\b Rückwärtsschritt (1 Zeichen)
\f Seitenende
\n Zeilenvorschub
\r Rücklauf zum Zeilenanfang
\t (Horizontaler) Tabulator
\v Vertikaler Tabulator

Um beliebige Zeichen darstellen zu können, können Ordnungszahlen von Zeichen in Hexadezimal- oder Oktal-Schreibweise benutzt werden, z.B in UTF-8:

>>> "\xc3\xb6\xc3\xa4\xc3\xbc" # Hexadezimal
öäü
>>> "\303\244" # Oktal
ä

Dummerweise ist die Kodierung vom jeweils eingestellten Zeichensatz abhängig, weswegen Programme, die Zeichen auf diese Art kodieren, nicht portabel sind. Eine bessere Lösung sind Unicode-Strings, die im nächsten Abschnitt erklärt werden.

[Bearbeiten] String-Varianten

Einfache Strings sind für die allermeisten Anwendungsfälle ausreichend. Probleme treten meist erst dann auf, wenn Programme auf verschiedene Landessprachen angepaßt werden sollen, oder wenn Reguläre Ausdrücke ins Spiel kommen. Hierfür gibt es spezielle Formen von Strings.

Ein Unicode-String kann sämtliche auf einem Computer darstellbaren Zeichen enthalten. Es werden beliebige Schriftarten unterstützt, insbesondere auch nicht-lateinische z.B. Kyrillisch, Arabisch oder Chinesisch.

Unicode-Strings werden durch ein führendes U bzw. u gekennzeichnet. In Ihnen können beliebige Zeichen als Hexadezimal-Code angegeben werden, der durch die Zeichen \u eingeleitet wird. Mit der Funktion unicode lassen sich normale Zeichenketten nach Unicode umwandeln, wobei die Codierung des Originals angegeben werden sollte.

>>> U"\u00e4"
u'\xe4'

>>> unicode( 'öäü', 'UTF-8')
u'\xf6\xe4\xfc'

Wenn die Auswertung von Steuerzeichen in einer Zeichenkette nicht gewünscht wird, kann man diese mit einem führenden r oder R deaktivieren. Dies ist meist bei Regulären Ausdrücken sinnvoll. Es kann auch in Kombination mit Unicode-Strings eingesetzt werden.

>>> "\r\n" # Normaler String
'\r\n'
>>> r"\r\n" # Ohne Auswertung von Steuerzeichen
'\\r\\n'

>>> u"\r\n" # Unicode-String
u'\r\n'
>>> ur"\r\n"      # Ohne Auswertung von Steuerzeichen
u'\\r\\n'

[Bearbeiten] None

Eine Variable vom Typ None hat keinen Wert. Er wird da benutzt, wo es ganz ohne Wert Fehler gäbe, z.B.bei nicht definierten Rückgabewerten (diese blendet der Debugger aus).

[Bearbeiten] Ausdrücke

[Bearbeiten] Konstante Ausdrücke

[Bearbeiten] Variablen

[Bearbeiten] Operatoren

[Bearbeiten] Funktionen

[Bearbeiten] Anweisungen

[Bearbeiten] Zuweisungen

[Bearbeiten] Schlüsselworte

[Bearbeiten] Blöcke

[Bearbeiten] Definitionen

Persönliche Werkzeuge