Python Tutorial
- jetzt Python programmieren lernen

Funktionen in Python

Bisher haben wir unsere Programmcode einfach von oben nach unten geschrieben und in dieser Reihenfolge wurde dieser abgearbeitet. Jetzt kann es vorkommen, dass wir einige Programmabläufe öfters benötigen. Beispielsweise wollen wir die Uhrzeit am Programmstart und am Programmende ausgeben. Dazu müssten wir den gleichen Code also verdoppelt und am Anfang und Ende unseres Programmes schreiben. Das bläht das Programm auf und bringt unnötige Fehlerquellen. Hier helfende Funktionen.

Was sind Funktionen?

Funktionen sind Programmcode, der aus dem "von-oben-nach-unten"-Ablauf des Programmes genommen werden und gezielt aufgerufen werden müssen. Das ermöglicht uns, diese Funktionen öfters aufzurufen und somit übersichtlichen Code zu schreiben, der weniger Fehlerquellen enthält.

Wir vergeben also einen Namen für unsere Funktion, die wir an jeder beliebigen Stelle im unserem Python-Programm aufrufen können.

Hierzu wird eine Funktion definiert. Und genau dieses Schlüsselwort def erwartet Python auch, wenn eine Funktionsname festlegt wird. Die typischen Klammern danach zeigen auch, dass es sich um eine Funktion handelt. Aber definieren wir es eine Funktion. Die nichts anderes macht, als die Textausgabe "Ausgabe von Text aus einer Funktion".

def ausgabe():
	print("Ausgabe von Text aus einer Funktion")
print("Programm abgelaufen")

Alles was eingerückt ist, gehört zu unserer definierten Funktion.

Rufen wir nun unser Programm auf, erhalten wir nur die Ausgabe:

Programm abgelaufen

Die neue Funktion mit dem Namen "ausgabe" selber wurde offensichtlich nicht ausgeführt, sonst hätte eine weitere Textausgabe stattfinden müssen.

Zum Aufrufen einer Funktion benötigen wir den Funktionsnamen gefolgt von den runden Klammern.

def ausgabe():
	print("Ausgabe von Text aus einer Funktion")
ausgabe()
print("Programm abgelaufen")

Jetzt erhalten wir die erwartete Ausgabe

Ausgabe von Text aus einer Funktion

Programm abgelaufen

Die Funktion können wir beliebig oft aufrufen. So können wir Code recyceln und sparen uns Tipparbeit:

def ausgabe():
	print("Ausgabe von Text aus einer Funktion")
ausgabe()
ausgabe()
print("Programm abgelaufen")

Werte in die Funktion übergeben

In die Funktionen hinein können Parameter übergeben werden. Dazu erweitern wir bei der Definition die Klammern, die bisher leer waren. Hier legen wir die Variablennamen fest. Mit diesen Variablen kann dann in der Funktion gearbeitet werden. Diesen Wert muss bei Funktionsaufruf in den Klammern übergeben werden. Wir übergeben die Zahl 5 in die Funktion:

def ausgabe(wert1):
	print("Ausgabe von Text aus einer Funktion")
	print(wert1)
ausgabe(5)

Als Ausgabe erfolgt nun:

Ausgabe von Text aus einer Funktion

5

mehrere Werte in Funktion übergeben

Soll nicht nur ein Wert, sondern mehrere Werte übergeben werden, werden die Variablennamen über Kommas getrennt.

def ausgabe(wert1, wert2):
	print("Ausgabe von Text aus einer Funktion")
	print(wert1)
	print(wert2)
ausgabe(5,3)

Jetzt kann man natürlich nach Belieben mit den Vorhandenen Variablen arbeiten. Als Beispiel lassen wir nun in der Funktion hinein 3 Werte übertragen und dann mit der Funktion eine for-Ausgabe (siehe früheres Kapitel zu for) und entsprechender Schrittweite.

def ausgabe(anfangswert, endwert, schrittweite):
	for x in range(anfangswert, endwert, schrittweite):
		print(x)
	print("Funktion ausgabe durchlaufen")
ausgabe(4, 9, 2)
ausgabe(-5, -8, -1)
print("habe fertig")

Wir erhalten nun die Ausgabe:

4
6
8
Funktion ausgabe durchlaufen
5
6
7
Funktion ausgabe durchlaufen
habe fertig

Somit sind wir deutlich flexibler bei der Ausgabe geworden. Je nach Anwendung ist der Umfang innerhalb einer Funktion deutlich umfangreicher als unsere 3 Beispielzeilen. An der Funktion und den Einsatzmöglichkeiten ändert sich dadurch nichts.

Standardvorgabe bei Funktionsaufruf

In unserem letzten Beispiel haben wir eine for-Schleife ausgegeben. In vielen Fällen ist die Schrittweite sehr oft 1. Daher wäre schön, wenn wir nur eine Angabe der Schrittweite machen müssen, wenn diese von 1 abweicht. Und das ist sehr einfach bei Python-Funktion möglich. Wir können einen Vorgabewert setzen. Dazu wird der Variablen bei der Definition über ein Gleichzeichen der Vorgabewert mitgegeben. Kommt kein Wert von außen, wird der Vorgabewert genutzt. Kommt ein Wert durch den Funktionsaufruf von außerhalb der Variablen, wieder dieser verwendet.

def ausgabe(anfangswert, endwert, schrittweite=1):
	for x in range(anfangswert, endwert, schrittweite):
		print(x)
	print("Funktion ausgabe durchlaufen")
ausgabe(4, 9)
ausgabe(4, 9, 2)

Als Ergebnis erhalten wir:

4
5
6
7
8
Funktion ausgabe durchlaufen
4
6
8
Funktion ausgabe durchlaufen

Beim ersten Aufruf wird der Vorgabewert von 1 genommen und wir sparen Tipparbeit beim Standardfall. Beim zweiten Aufruf wird die übergeben 2 als Schrittweite genutzt.

Wollen wir nun auch den Startwert für unser for-Ausgabe auf 1 setzen, weil in unserem Fall das sehr oft vorkommt, können wir das tun:

def ausgabe(anfangswert=1, endwert, schrittweite=1):
	for x in range(anfangswert, endwert, schrittweite):
		print(x)
	print("Funktion ausgabe durchlaufen")
ausgabe(9)

Allerdings führt es zu der Fehlermeldung "SyntaxError: non-default argument follows default argument". Warum? Der Interpreter von Python weißt die Zahl 9 unserem Anfangswert zu und erwartet dann für den "endwert" auf jeden Fall eine Eingabe. Da dieser keine Vorgabe hat, wirft Python mit Fehlermeldungen nach uns.

Hier ist die übliche Vorgehensweise, dass Werte mit Vorgaben einfach rechts von den Werten ohne Vorgaben stehen. Bauen wir unser Beispiel entsprechend um:

def ausgabe(endwert, anfangswert=1, schrittweite=1):
	for x in range(anfangswert, endwert, schrittweite):
		print(x)
	print("Funktion ausgabe durchlaufen")
ausgabe(9)

Jetzt funktioniert unserer Funktion auch mit dem Aufruf von nur einer Angabe. Allerdings müssen wir im Hinterkopf haben, dass nun die Reihenfolge des Funktionsaufrufes erst der "endwert", dann ein eventueller "anfangswert", wenn nicht anders wie 1 und eine "schrittweite", wenn nicht anders wie 1, ist

Das ist die übliche Vorgehensweise und kann extrem viel Tipparbeit sparen.