======Funktionen in Python======
Die Beispiele aus diesem Abschnitt können in einem Jupyternotebook nachvollzogen werden. Es muss zusammen mit den Bilddateien vorher entpackt werden.
{{ :neuerlehrplan:klasse10:funktionen.zip |Notebook Funktionen}}
Danach kann man das Notebook zusammen mit den Bildern z.B. bei https://jupyter.org/try -> JupyterLab hochladen und öffnen.
=====Definition und Aufruf einer Funktion=====
Zur Definition einer Funktion verwendet man in Python das Schlüsselwort ''%%def%%''. Danach steht der Funktionsname. Für ihn gelten dieselben Konventionen wie Variablennamen. Nach dem Namen folgt ein Paar Klammern ''%%()%%''. In diesen Klammern können Variablen stehen (Siehe unten!). Nach den Klammern steht ein Doppelpunkt ''%%:%%''. Der Quelltext, der nach der Funktion eingerückt wird, gehört zur Funktion.
def meineFunktion():
...Anweisungen...
Im Quelltext kann dann die Funktion mit Hilfe ihres Namen im Quelltext aufgerufen werden:
...Anweisungen...
meineFunktion()
...Anweisungen...
**Beispiel:**
In unserem Beispiel wird eine Funktion ''%%trennlinie()%%'' definiert, die die Zeichenkette "###############################################" ausgibt, um die Ein- und Ausgaben abzutrennen.
def trennlinie():
print("###############################################")
trennlinie()
name = input("Dein Name: ")
trennlinie()
print("Hallo",name,"du hast einen schönen Namen")
trennlinie()
Die Ausführung des Programms sieht dann so aus:
###############################################
Dein Name: Obiwan Kenobi
###############################################
Hallo Obiwan Kenobi du hast einen schönen Namen
###############################################
=====Lokale und globale Variablen=====
Wir betrachten das folgende Pythonprogramm:
def test():
i=3
print("Wert von i:",i)
#Hauptprogramm
i=5
print("Wert von i:",i)
test()
print("Wert von i:",i)
bei der Ausgabe des Programms ergibt sich das Folgende:
Wert von i: 5
Wert von i: 3
Wert von i: 5
Wie ist die Ausgabe des Programms zu erklären?
Zunächst wird einer Variablen i ein Wert zugewiesen. Dieser Wert wird dann ausgegeben.
Anschließend wurde die Funktion aufgerufen. Innerhalb der Funktion wird nun wieder einer Variablen i ein Wert zugewiesen. Da die Zuweisung innerhalb der Funktion (im lokalen Namensraum) erfolgt, ist i eine lokale Variable, die sich von der ersten Variable i, einer globalen Variable, unterscheidet.
Nun wird i innerhalb der Funktion ausgegeben. Dazu wird i zunächst im lokalen Namensraum, also innerhalb
der Funktion, gesucht. Es wird also auf das i innerhalb der Funktion zugegriffen und der entsprechende Wert ausgegeben. Würde i nicht im lokalen Namensraum existieren, so würde das Programm im globalen Namensraum danach suchen. Nach Beendigung der Funktion existiert die lokale Variable i nicht mehr.
Im weiterem Programmverlauf wird aber nun erneut i ausgegeben. Hier wird nun wieder das ursprüngliche i verwendet, welches im globalen Namensraum definiert wurde. Der Wert einer globalen Variable darf aber im lokalen Namensraum nur verändert werden, wenn bei der Wertzuweisung vor ihr das Schlüsselwort ''%%global%%'' steht.
=====Funktionen mit Parametern und Rückgabewerten=====
====Parameter====
Einer Funktion können beim Aufruf Werte übergeben werden. Dazu schreibt man bei der Definition der Funktion in die Klammer nach den Funktionsnamen sogenannte **formale Parameter**. Im Quelltext der Funktion werden diese behandelt, wie lokale Var 1iablen.
**Beispiel:**
Im folgenden Programm wird eine Funktion ''%%summe(a,b)%%'' mit den formalen Parametern ''%%a%%'' und ''%%b%%'' definiert. Diese Parameter werden in der Funktion wie lokale Variable verwendet.
Beim Funktionsaufruf werden den Parametern konkrete Werte übergeben. Beim ersten Aufruf sind dies die Zahlen 3 und 4, beim zweiten die Werte 8 und 9, die zuvor den variablen x und y zugewiesen worden.
def summe(a,b):
print("Summe von",a,"und",b,":",a+b)
summe(3,4)
x=8
y=9
summe(x,y)
Als Ausgabe des Programms ergibt sich:
Summe von 3 und 4 : 7
Summe von 8 und 9 : 17
====Rückgabewerte====
Funktionen können auch Werte haben zurück ans Hauptprogramm übergeben. Dies geschieht mit dem Schlüsselwort ''%%return%%''. Um die Verwendung von ''%%return%%'' zu erklären, wandeln wir unser obiges Beispiel ab:
**Beispiel:**
def summe(a,b):
return a+b
x = 3
y = 4
s = summe(x,y)
print("Die Summe von",x,"und",y,"ist",s,".")
n = 8
m = 9
print("Die Summe von",n,"und",m,"ist",summe(n,m),".")
In diesem Beispiel wird von der Funktion die Summe der Parameter a und b an das Hauptprogramm zurückgegeben. Beim ersten Aufruf der Funktion ''%%s = summe(x,y)%%'' wird der Rückgabewert der Variablen ''%%s%%'' zugewiesen. ''%%s%%'' wird dann in der nachfolgenden **print**-Anweisung verwendet.
Beim zweiten Aufruf ''%%summe(n,m)%%'' wird der Rückgabewert direkt in die **print**-Anweisung geschrieben.
Als Ausgabe des Programms ergibt sich:
Die Summe von 3 und 4 ist 7 .
Die Summe von 8 und 9 ist 17 .
====Vorbelegung der Parameter====
Die Parameter einer Funktion lassen sich in der Definition vorbelegen. Dazu das folgende Beispiel:
def summe(a = 0 ,b = 1):
return a+b
print(summe())
print(summe(3))
print(summe(3,4))
Die Parameter ''%%a%%'' und ''%%b%%'' sind mit den Werten 0 und 1 vorbelegt. Dadurch muss die Funktion nicht mehr mit allen Parametern aufgerufen werden. Beim ersten Aufruf ''%%summe()%%'' werden die Parameter mit den Werten 0 und 1 belegt. Beim zweiten Aufruf ''%%summe(3)%%'' wird der erste Parameter ''%%a%%'' mit 3 belegt, ''%%b%%'' bleibt mit 1 belegt. Beim dritten Aufruf ''%%summe(3,4)%%'' werden ''%%a%%'' und ''%%b%%'' die entsprechenden Werte übergeben. Als Ausgabe des Programms ergibt sich:
1
4
7
Es ist auch möglich in der Funktionsdefinition nur einige Parameter zu belegen. Diese müssen aber dann am Ende der Parameterliste stehen:
def summe(a ,b = 1):
return a+b
print(summe(3))
print(summe(3,4))
Ausgabe:
4
7
=====Darstellung einer Funktion im Struktogramm=====
Der Algorithmus einer Funktion wird in einem Extra-Struktogramm dargestellt.
{{ :neuerlehrplan:klasse10:1_07_struktogramm_funktion.png?direct&600 |}}
Im Hauptprogramm wird dann der Funktionsaufruf als Befehl angegeben.
{{ :neuerlehrplan:klasse10:1_07_struktogramm_hauptprogramm.png?direct&600 |}}
===== Übungen =====
Im folgenden Jupyternotebook finden sich einige Übungsaufgaben zum Thema.
{{ :neuerlehrplan:klasse10:funktionen_uebungen.zip |Übungen}}