Fachkonzept - Funktion
Funktion als Verarbeitungseinheit
Eine Funktion ist eine Verarbeitungseinheit, die übergebene Daten verarbeitet und den berechneten Funktionswert als Ergebnis zurückgibt.
Funktionen kennst du aus der Mathematik.
Beispiel 1:
Die Funktion f
mit der Funktionsdefinition f(x) = x2
ordnet jeder Zahl (aus einer noch festzulegenden Definitionsmenge) ihr Quadrat zu.
Die entsprechende Funktionsdefinition sieht in Python so aus:
def f(x):
return x*x
Der Funktionsaufruf f(3)
liefert dann das Quadrat der Zahl 3.
In Python kann man einen Funktionsaufruf direkt im Ausführfenster auswerten lassen:
>>> f(3)
9
Beispiel 2:
Die Funktionen A
bzw. u
mit den Funktionsdefinitionen
A(a, b) = a*b
und u(a, b) = 2*a+2*b
ordnen den Seitenlängen eines Rechtecks
den Flächeninhalt bzw. den Umfang des Rechtecks zu.
Die entsprechenden Funktionsdefinitionen sehen in Python so aus:
def A(a, b):
return a*b
def u(a, b):
return 2*a+2*b
Der Funktionsaufruf
A(2, 5)
liefert den Flächeninhalt 10 eines Rechtecks mit den Seitenlängen 2 und 5,
der Funktionsaufruf
u(2, 5)
den Umfang 14. In Python kann man das so realisieren:
>>> A(2, 5)
10
>>> u(2, 5)
14
Funktionen werden nicht nur in der Mathematik benutzt, sie bilden auch ein wichtiges Werkzeug in der Informatik bei der automatisierten Datenverarbeitung.
Funktionsmodellierung
Als Beispiel betrachten wir die Funktion ersetzterText
.
Diese Funktion soll ein bestimmtes Zeichen jeweils durch ein anderes Zeichen in einem gegebenen Text
ersetzen.
Wir modellieren eine solche Verarbeitungseinheit mit einem Black-Box-Diagramm:
Funktionsdefinition
Eine Funktion muss vorab definiert werden, bevor sie benutzt werden kann. Hierzu muss man eine Programmeinheit als Funktionsdefinition entwickeln.
Im Fall der Funktion ersetzterText
könnte die Funktionsdefinition in Python
wie folgt aussehen:
def ersetzterText(zeichenAlt, zeichenNeu, text):
textNeu = ''
for zeichen in text:
if zeichen == zeichenAlt:
textNeu = textNeu + zeichenNeu
else:
textNeu = textNeu + zeichen
return textNeu
Die Funktionsdefinition besteht aus zwei Teilen, einem Funktionskopf und einem Funktionskörper.
Der Funktionskopf beginnt mit def
. Es folgt der Funktionsname und - in Klammern - die
Auflistung der sogenannten Parameter (s.u.). Den Abschluss bildet der Doppelpunkt.
Der Funktionsrumpf ist eine Folge von Anweisungen zur Berechnung des Funktionswerts.
Diese Anweisungen müssen - wie in Python üblich - eingerückt werden. Mit einer return
-Anweisung
(das ist meist die letzte Anweisung) wird der zurückgelieferte Funktionswert festgelegt.
Funktionsaufruf
Bei einem Funktionsaufruf wird die Verarbeitungseinheit aktiviert, so dass sie für die übergebenen Daten eine Rückgabe erzeugt.
>>> ersetzterText('s', 'n', 'Tasse')
'Tanne'
Parameter
Parameter sind Variablen, mit deren Hilfe die zur Verarbeitung übergebenen Daten bei einer Funktion verwaltet werden.
Bei einem Funktionsaufruf müssen die Parameter mit konkreten zu verarbeitenden Daten versehen werden.
>>> ersetzterText('i', 'a', 'Drei Chinesen mit dem Kontrabass ...')
'Drea Chanesen mat dem Kontrabass ...'
>>> lied = 'Drei Chinesen mit dem Kontrabass ...'
>>> ersetzterText('i', 'a', lied)
'Drea Chanesen mat dem Kontrabass ...'
>>> ersetzterText('e', 'a', ersetzterText('i', 'a', lied))
'Draa Chanasan mat dam Kontrabass ...'
Die zu verarbeitenden Daten können
wie im Beispiel ersetzterText('i', 'a', 'Drei Chinesen mit dem Kontrabass ...')
direkt durch konkrete Datenobjekte festgelegt werden.
Die zu veraberbeitenden Daten können aber auch indirekt mit Hilfe von Termen beschrieben werden.
Im Beispiel ersetzterText('i', 'a', lied)
wird der zu verarbeitende Text mit Hilfe
einer Variablen übergeben.
Im Beispiel ersetzterText('e', 'a', ersetzterText('i', 'a', lied))
wird der zu
verarbeitende Text mit Hilfe eines komplexeren Terms übergeben.
Weitere Hinweise zur Datenübergabe findest du in den folgenden Abschnitten.
Funktionsdefinition als Unterprogramm
Funktionsdefinitionen sind Programmeinheiten, die als Unterprogramme in komplexeren Programmen vorkommen können.
Wenn ein Funktionsaufruf im Hauptprogramm ausgeführt wird, dann werden die als Unterprogramm ausgelagerten Anweisungen der Funktionsdefinition ausgeführt, bevor es mit der nächsten Anweisung im Hauptprogramm weitergeht.
Das folgende Programm enthält neben dem Hauptprogramm eine Funktionsdefinition als Unterprogramm.
# Unterprogramme
def ersetzterText(zeichenAlt, zeichenNeu, text):
textNeu = ''
for z in text:
if z == zeichenAlt:
textNeu = textNeu + zeichenNeu
else:
textNeu = textNeu + z
return textNeu
# Hauptprogramm
# Initialisierung
lied = """
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
"""
# Verarbeitung
liedA = ersetzterText('e', 'a', lied)
liedA = ersetzterText('i', 'a', liedA)
liedA = ersetzterText('o', 'a', liedA)
liedA = ersetzterText('u', 'a', liedA)
# Ausgabe
print(lied)
print(liedA)