Einführung¶
Interaktiver Modus¶
Um Python im interaktiven Modus zu starten, ruft man den Interpreter in einer Shell ohne weitere Parameter auf:
python3
Nach dem Eingabe-Prompt >>>
kann beliebiger Python-Code eingegeben werden.
Drückt man die Enter-Taste, so wird dieser unmittelbar ausgeführt. So lässt sich
der Python-Interpreter beispielsweise als besserer Taschenrechner benutzen: [1]
>>> 5 + 3 # Addition
8
>>> 7 * 21 # Multiplikation
147
>>> 15 ** 2 # Potenz
225
>>> 14 / 80 # Division
0.175
Möchte man ausführlicher im interaktiven Modus arbeiten, so lohnt es sich,
Ipython zu installatieren und ipython3
als Shell-Version beziehungsweise ipython3 qtconsole
als GUI-Version
aufzurufen. Beide Varianten von Ipython bieten Vervollständigungen der Eingabe
durch Drücken der Tab-Taste, die GUI-Version bietet zudem Syntax-Highlighting
und ein automatisches Einblenden von Funktionsbeschreibungen („Docstrings“).
Interne Hilfe
Jeder Python-Interpreter bietet dem Nutzer im interaktiven Modus die
Möglichkeit, weitere Informationen oder Dokumentationen zu Python-Objekten
(Funktionen, Operatoren usw.) anzuzeigen. Um Hilfe zu einem beliebigen
Python-Objekt zu erhalten, kann die Funktion help()
genutzt werden:
# Hilfe zur print()-Funktion anzeigen:
help(print)
Ebenso können Variablen an die Help-Funktion übergeben werden, um Hilfe zum
jeweiligen Objekttyp zu erhalten. Mit type(object_name)
kann der Typ eines
Objekts, mit id(variable_name)
zusätzlich die aktuelle Speicheradresse des
Objekts angezeigt werden.
Python-Skripte¶
Python-Code, der bei der interaktiven Benutzung des Interpreters eingegeben
werden kann, kann in gleicher Form ebenso in Textdateien („Skripte“),
üblicherweise mit der Endung .py
, geschrieben werden. Derartige Dateien
können entweder in einer interaktiven Python-Sitzung mittels
execfile("skriptname.py")
oder folgendermaßen in einem Shellfenster
aufgerufen werden:
python3 skriptname.py
Beim Aufruf eines Skripts wandelt Python den Quellcode in so genannten
„Bytecode“ um und führt diesen aus. Wird eine Quellcode-Datei anderen Dateien
importiert, so legt Python automatisch eine zusätzliche Datei skriptname.pyc
im gleichen Verzeichnis an.
Es ist auch möglich, eine Skriptdatei direkt als ausführbare Datei aufzurufen. Dazu fügt man zunächst folgende Zeilen am Anfang der Skriptdatei ein:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
Die erste Zeile wird „Shebang“ genannt und gibt den Pfad zum Python-Interpreter
an, der beim Aufruf des Skripts geladen werden soll; die zweite Zeile gibt an,
welcher Zeichensatz in der Datei verwendet wird (utf-8
ist Standard unter
Linux).
Mit der obigen Ergänzung kann die Skriptdatei dann mittels chmod ausführbar gemacht werden:
chmod +x skriptname.py
Das Skript kann damit mittels ./skriptname.py
aus dem aktuellen Pfad heraus
oder allgemein mittels pfad-zum-skript/skriptname.py
aufgerufen werden. Soll
es benutzerweit aufrufbar sein, so empfiehlt es sich, einen Symlink zum Skript im Verzeichnis ~/bin
zu erstellen und dieses
durch folgenden Eintrag in der ~/.bashrc
zum Systempfad hinzuzufügen: [2]
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
export PATH;
fi
Das Schreiben von Code-Dateien ist in Python gegenüber der interaktiven Benutzung des Interpreters unter anderem deshalb von Vorteil, da Python beispielsweise bei der Definition von Funktionen und Kontrollstrukturen Einrückungen statt Klammern zur Gliederung des Quellcodes verwendet.
Gute Texteditoren machen den Umgang mit Einrückungen einfach und bieten obendrein Vorteile wie Syntax-Highlighting, Eingabe-Vervollständigungen, Snippets, usw. Bei Verwendung von Vim und des Vicle-Plugins ist es zudem auch während des Schreibens der Textdateien möglich, einzelne Code-Zeilen oder auch ganze Code-Blöcke an eine laufende Interpreter-Sitzung zu senden; so können die Vorteile des Interpreters (beispielsweise Ausgabe von Variablenwerten und Zwischenergebnissen) und des Texteditors kombiniert werden.
Umfangreichere Skripte sollten zur besseren Lesbarkeit mit Kommentaren versehen
werden. Kommentare werden durch das Raute-Symbol #
eingeleitet und gehen bis
zum Ende der Zeile.
Variablen¶
Eine wichtige Eigenschaft von Computer-Programmen ist, dass sie nahezu beliebig viele Werte und Zeichen in entsprechenden Platzhaltern („Variablen“) speichern und verarbeiten können. Auf so gespeicherte Werte kann man im Verlauf des Programms wieder zugreifen und/oder den Variablen neue Werte zuweisen.
In Python können Variablennamen aus Groß- und Kleinbuchstaben, Ziffern und dem
Unterstrich-Zeichen bestehen, wobei sie nicht mit einer Ziffer beginnen dürfen.
Bei der Benennung von Variablen ist außerdem auf Groß- und Kleinschreibung zu
achten, beispielsweise bezeichnen var_1
und Var_1
zwei unterschiedliche
Variablen. Zudem dürfen keine von der Programmiersprache reservierten Wörter als
Variablennamen verwendet werden (beispielsweise and, or, is, type, key
usw.)
Ein Wert kann in einer Variablen mittels des Zuweisungs-Operators =
gespeichert werden:
var_1 = "Hallo!"
var_2 = 42
In Python dient das =
-Zeichen somit ausschließlich der Zuweisung von Werten;
für einen Werte-Vergleich muss hingegen das doppelte Istgleich-Zeichen ==
verwendet werden.
Im interaktiven Modus wird der Wert einer Variablen angezeigt, indem man deren
Namen in einer neuen Zeile eingibt und Enter
drückt. In Skripten werden die
Werte von Variablen oftmals mittels der Funktion print()
angezeigt:
print(var_1)
print(var_2)
Bei der Verwendung von print()
werden dabei die Variable als
Zeichenkette ausgegeben.
Variablen werden in Python dynamisch typisiert, das heißt in der gleichen Variablen können im Verlauf des Programms verschiedene Datentypen zugewiesen werden.
Operatoren¶
Bei der Auswertung einzelner mathematischer Ausdrücke gilt wie üblich „Punkt vor Strich“. Um eine andere Auswertungsreihenfolge zu bewirken, können einzelne Ausdrücke, wie in der Mathematik üblich, durch runde Klammern zusammengefasst werden.
Für die in Python üblichen Operatoren ist eine allgemein gültige „Rangfolge“ für die Auswertungsreihenfolge festgelegt. In der folgenden Tabelle sind die Operatoren mit der höchsten Priorität stehen oben, gleichberechtigte Operatoren (die von links nach rechts ausgewertet werden) stehen in der gleichen Zeile. [3]
Operator | Bedeutung |
() |
Gruppierung |
x[] , x.attribute |
Listenzugriff (siehe Listen), Objekteigenschaft |
** |
Potenz |
+ und - |
Positives beziehungsweise negatives Vorzeichen einer Zahl |
* , / , // , % |
Multiplikation, Division, Ganzzahl-Division, Rest (Modulo) |
<= , < , > , >= |
Wertevergleich (kleiner als oder gleich, kleiner als, größer als oder gleich, größer als) |
== , != |
Wertevergleich (ist gleich, ist nicht gleich) |
= , += , -= , *= , /= , %= , **= |
Wertezuweisung |
is , is not , |
Identitätsvergleich |
in , not in |
Test auf Mengenzugehörigkeit |
and , or , not |
Logische Operatoren |
In Python muss zwischen dem Wertevergleich ==
und der Objekt-Identität
is
unterschieden werden. Beispielsweise liefert 3/2 == 1.5
das Ergebnis
True
, da die numerischen Werte übereinstimmen; hingegen liefert 3/2 is
1.5
das Ergebnis False
, da es sich einmal um einen mathematischen Ausdruck
und einmal um eine Zahl handelt.
Kombinierte Zuweisungsoperatoren
Neben dem gewöhnlichen Zuweisungsoperator =
gibt es in Python weitere,
kombinierte Zuweisungsoperatoren. Mit diesen wird ein mathematischer Operator
mit einer Zuweisung verbunden; die Variable wird dabei also um den jeweiligen
Wert verändert.
+= |
Erhöhung der links stehenden Variable um Wert auf der rechten Seite |
-= |
Erniedrigung der links stehenden Variable um Wert auf der rechten Seite |
*= |
Multiplikation der links stehenden Variable mit Wert auf der rechten Seite |
/= |
Division der links stehenden Variable durch Wert auf der rechten Seite |
//= |
Ganzzahlige Division der links stehenden Variable durch Wert auf der rechten Seite |
//= |
Rest bei ganzzahliger Division der links stehenden Variable durch Wert auf der rechten Seite |
**= |
Potenzieren einer Variable mit Wert auf der rechten Seite |
Beispielsweise kann auf diese Weise mit x **= 2
der aktuelle Wert der
Variablen x
quadriert werden. Für Zeichenketten existieren nach dem
gleichen Prinzip die Operatoren +=
und *=
, die zum String auf der linken
Seite einen weiteren String anhängen bzw. den String auf der linken Seite
mehrfach wiederholt aneinander reihen.
Kombinierte Vergleichsoperatoren
Eine weitere Besonderheit in Python liegt darin, dass mehrere
Vergleichsoperatoren unmittelbar miteinander kombiniert werden können;
beispielsweise kann wie in der Mathematik 1 < 2 < 3
geschrieben werden.
Die einzelnen Teilausdrücke muss man sich dabei mit einem and
-Operator
verbunden denken, denn der Ausdruck ist genau dann wahr, wenn 1 < 2 and 2 <
3
gilt.
Die „Verkettungsregel“ gilt für alle Vergleichsoperatoren, auch wenn das
Ergebnis nicht immer mit der eigenen Erwartung übereinstimmen muss.
Beispielsweise könnte man im Fall 1 == 2 < 3
das Ergebnis True
erwarten,
wenn man sich die gleichwertigen Operatoren von links nach rechts ausgewertet
denkt, denn 1 == 2
ist False
und zudem ist False < 3
. Die Aussage
liefert in Python jedoch False
als Ergebnis, denn sie wird als 1 == 2 and
2 < 3
interpretiert, und zwei mit and
verknüpfte Aussagen ergeben nur dann
ein wahres Ergebnis, wenn beide Aussagen wahr sind.
Im Zweifelsfall können die einzelnen Teilaussagen jederzeit mit Hilfe von runden Klammern gruppiert werden, um eine ungewollte Auswertungsreihenfolge zu vermeiden.
Bedingte Wertzuweisung
In Programmiersprachen wie C
gibt es ein Sprachkonstrukt, dass einem
„ternären“ Operator entspricht, also ein Operator mit drei notwendigen
Argumenten. In C
lautet dieser Operator etwa x = condition ? a : b
, was
bedeutet, dass der Variablen der Wert a
zugewiesen wird, wenn die
Bedingung condition
wahr ist; andernfalls wird der Variablen x
der Wert
b
zugewiesen.
In Python lautet das entsprechende Sprachkonstrukt folgendermaßen:
x = a if condition else b
Auch hier wird zunächst die Bedingung condition
geprüft. Wenn diese den
Wert True
ergibt, so wird der Variablen x
der Wert a
zugewiesen,
andernfalls der Wert b
.
Anmerkungen:
[1] | Neben der gewöhnlichen Division mit Wurzeln können entweder als Potenzen mit einer rationalen Zahl als Exponent
oder mittels der Funktion |
[2] | Dieser Trick ist im Shell-Skripting-Tutorial näher beschrieben. |
[3] | Eine Ausnahme bildet der Potenz-Operator ** : Werden mehrere Potenzen
in einem Ausdruck kombiniert, so werden diese von rechts nach links
ausgewertet. Somit gilt 2 ** 2 ** 3 == 2 ** 8 == 256 . Für eine
andere Auswertungsreihenfolge muss (2 ** 2) ** 3 == 4 ** 3 == 64
geschrieben werden. |