Erweiterte Funktionen in Python

Aufbauend auf meinem ersten Artikel gehe ich hier auf die Verwendung von Funktionen ein. Zudem erkläre ich, wie wir Schleifen und Bedingungen erstellen. Auch das Einbinden von vorhandenen Python-Modulen wird vorgestellt.
Schleifen
Eine for-schleife, wie man sie in vielen Programmiersprachen kennt, gibt es in Python nicht. Meist
schreibt man etwas wie for (int index = 0; index < 10; index++){ ... }
.
In Python kann prinzipiell nur über Listen iteriert werden. Dies bedeutet, dass wir eine Liste von 0
bis 10 erstellen und anschließend über diese Liste eine Schleife ausführen.
Ich sehe einen großen Vorteil darin, dass es nur eine Art von for-Schleifen gibt. Es stellt sich nicht die Frage, ob eine (klassische) for-Schleife geeignet ist oder ob man lieber for-each anwendet.
Eine Liste in Python muss nicht zwangsweise einen festen Typen besitzen. Wir können eine reine Liste aus Zahlen, Zeichenketten oder Objekten erzeugen. Eine Liste muss nicht typenrein sein. Eine Liste kann gemischte Typen beinhalten.
listA = [1, 2, 3]
listB = ["a", "b", "c"]
listC = [5, "a string", [10, 20]]
for item in MY_LIST:
print(item)
# Ausgabe pro Liste. Hierzu wurde MY_LIST durch listA, listB oder
# listC ersetzt.
# Ausgabe von listA (nur Zahlen)
> 1
> 2
> 3
# Ausgabe von listB (nur Strings)
> a
> b
> c
# Ausgabe von listC (gemischte Typen)
> 5
> a string
> [10, 20]
Um eine einfache Zählschleife zu erzeugen, gibt es die Funktion range(start, end, step)
. Wir
können
auch nur das Ende eingeben. Range beginnt standardmäßig bei 0 und zählt immer um 1 nach oben. Dies
gibt uns folgende Möglichkeiten:
listA = range(3) # 0, 1, 2
listB = range(6,10) # 6, 7, 8, 9
listC = range(0, 10, 2) # 0, 2, 4, 6, 8
listD = range(-5, 0) # -5, -4, -3, -2, -1
listE = range(-5, -8) # Leere Liste
listF = range(3, -3, -1) # -3, -2, -1, 0, -1, -2
While-Schleifen funktionieren in Python analog zu anderen Programmiersprachen. Solange die Bedingung wahr ist, wird der Inhalt der Schleife ausgeführt. Ist die Bedingung falsch, bricht die Schleife ab. Anmerkung: Schleifen können auch manuell abgebrochen werden. Dies ist nicht teil dieses Artikels.
Ein Beispiel für eine while-Schleife findet ihr in folgendem Codebeispiel:
counter = 0
while counter < 5:
print("Counter is %d" % counter)
counter += 1;
# Ausgabe
> Counter is 0
> Counter is 1
> Counter is 2
> Counter is 3
> Counter is 4
Euch ist sicherlich die Syntax für Schleifen aufgefallen: In der ersten Zeile steht die Art der Schleife (for, while) und anschließend die Bedingung. Nun kommen jedoch keine Klammern sondern ein Doppelpunkt. Nun wird der Code eingerückt. Der eingerückte Code gehört nun zu der Klammer. Sobald die erste Zeile nicht mehr eingerückt ist, gehört dieser nicht mehr zur Klammer.
Bedingungen
Bedingungen haben eine ähnliche Syntax zu Schleifen.
if BEDINGUNG:
print("True")
else:
print("False")
Dies können wir in einem kleinen Beispiel zusammen mit einer Schleife anwenden. Achtet hierbei darauf, dass wir zwei Einrückungen haben. Eine für die Schleife, die andere für die Bedingung.
counter = 0
while counter < 5:
if counter == 3:
print("Counter is 3")
else:
print("Counter is not 3. Counter is %d" % counter)
counter += 1
# Ausgabe
> Counter is not 3. Counter is 0
> Counter is not 3. Counter is 1
> Counter is not 3. Counter is 2
> Counter is 3
> Counter is not 3. Counter is 4
Bedingungen auf Gleichheit werden mit einem doppelten Anführungszeichen durchgeführt. Andere
Abfragen sind >, >=, <, <=, !=
.
Funktionen erstellen
Ein Funktionsrumpf hat im Grunde folgende Struktur:
def METHOD_NAME(PARAMETERS):
# Some code
# Optional: return ANY_VALUE
def
ist ein Schlüsselwort, um eine Methode zu definieren. Anschließend legen wir einen Namen fest.
In runden Klammern werden Übergabeparameter definiert. In den eingerückten Zeilen erstellen wir die
Logik.
Diese kann folgendermaßen aussehen:
# Diese Methode multipliziert zwei Zahlen miteinander
def multiply(x, y):
print("Multiply %d and %d" % (x, y))
return x * y
# Diese Methode führt eine Aktion durch, gibt jedoch keine Werte zurück
def doSomething():
print("doSomething executed")
# Aufruf der Methode
value1 = 5
value2 = 7
result = multiply(value1, value2)
doSomething()
print("Result: %d" % result)
In der Ausgabe sollte nun die Multiplikation der Werte und der Aufruf von doSomething
erscheinen.
Somit können wir nun Methoden schreiben, welche immer wiederkehrende Aufgaben ausführen. Dadurch
haben wir den Vorteil, dass wir beispielsweise 10 Zeilen Code nur 1x schreiben müssen und aufrufen,
anstatt diese Zeile mehrfach innerhalb des Skripts zu halten.
Des Weiteren muss nur eine Stelle geändert werden, falls die Methode einen Fehler aufweist ( Beispiel: Die Methode addiert anstatt multipliziert).
Module einbinden
Es gibt verschiedene Module, welche die Funktionen von Python erweitern. Darunter zählen beispielsweise Kalenderfunktionen, Dateiverarbeitung oder Netzwerkkommunikation. Anmerkung: Ein Link aller verfügbaren Module für Version 2 befindet sich am Ende des Artikels.
Module müssen mit einem import-Befehl in das aktuelle Skript eingebunden werden, bevor diese zur
Verfügung stehen. Zur Veranschaulichung verwende ich das calendar
Modul (Link zur Dokumentation
siehe unten).
# Import des calendar-module
import calendar
# Import mit alias
import calendar as MyCustomImport
# Aufruf einer Funktion aus dem Modul
# prmonth gibt den ausgewählten Monat auf der Konsole aus
# Ausgabe des Kalenders vom Januar 2017
calendar.prmonth(2017, 01)
# Ausgabe des Kalenders vom Januar 2017 mittels Alias
MyCustomImport.prmonth(2017, 01)
# Ausgabe (2x)
> January 2017
> Mo Tu We Th Fr Sa Su
> 1
> 2 3 4 5 6 7 8
> 9 10 11 12 13 14 15
> 16 17 18 19 20 21 22
> 23 24 25 26 27 28 29
> 30 31
Ich habe oben mit import das gewünschte Modul eingebunden. Python sucht im Standardverzeichnis nach dem Modul. Kann es das angegebene Modul nicht finden, erscheint eine Fehlermeldung.
Darunter verwendet ich das Schlüsselwort as
und einen Alias. Damit wird der Alias mit dem Modul
verknüpft. Dies ist Hilfreich, wenn verschiedene Module verwendet werden, welche den gleichen Namen
haben. Wenn es zwei verschiedene calendar-Module gibt, kann mit calendar
nicht eindeutig
zugegriffen werden.
Im oberen Beispiel verwende ich den Alias zur Veranschaulichung. Hier wird das selbe Modul zwei Mal
geladen. Einmal “normal” und das zweite Mal mit Alias. Die Funktion prmonth
ist im Modul definiert
und daher erscheint die Ausgabe des Kalenders auch doppelt.
Nachfolgend findet Ihr die im Artikel genannten Links zur Python-Dokumentation.