Hallo und Herzlich Willkommen =)
In dieser Lektion zeige ich dir wie du mit Hilfe von Funktionen einen Teil deines Codes an mehreren verschiedenen Stellen deines Programmes nutzen kannst, ohne immer wieder den gleichen Code wiederholen zu müssen.

Wenn ein Teil deines Codes eine bestimmte Aufgabe erfüllt, die du häufiger in deinem Programm verwendest, kannst du diesen Code Abschnitt ein eine Funktion schreiben.
Eine neue Funktion definierst du mit dem Schlüsselwort „def“.
Danach kannst du der Funktion einen beliebigen Namen geben.
Für die Benennung von Funktionen folge ich der Pascal Case Konvention, die wir bereits in der Variablen Lektion kennengelernt haben (zum Beispiel: MeinVariablenName).
Auch dabei gibt es natürlich verschiedene Meinungen und Vorlieben, und du solltest vor allem darauf achten, dass du innerhalb deiner Programme nicht wechselst, sondern eine einheitliche Konvention einhältst.
Nach dem Namen schließt du den Definitionsteil der Funktion mit „():“ ab.
Den dazugehörigen Code schreibst du wie gewohnt mit Leerzeichen oder Tabs eingerückt in die darauffolgenden Zeilen.
Wenn du eine Funktion ausführen möchtest, dann gibst du einfach nur ihren Namen gefolgt von „()“ ein.

def NameMeinerFunktion():
    print("Code meiner Funktion wird ausgeführt.")

NameMeinerFunktion()

### ERGEBNIS / AUSGABE ###
Code meiner Funktion wird ausgeführt.
Wenn dir das Verdächtig nach ähnlich zu der print() Funktion aussieht, die du schon häufiger genutzt hast, dann hast du ein sehr gutes Auge =)
Denn auch jedes Mal wenn wir print(“Mein Text den ich ausgeben möchte.”) nutzen, rufen wir eine bereits geschriebene und von Python bereitgestellte Funktion auf.
Ein auffälliger Unterschied ist, dass wir nach dem Funktionsnamen „print“ noch etwas in die Klammern schreiben können.
Das ist ein sogenannter Parameter.
Ein Parameter ist eine Variable, die du einer Funktion zur Ausführung mitgeben kannst.
Der Wert dieser Variable kann dann in der Funktion weiterverwendet werden.
Im Fall der print() Funktion kannst du ihr zum Beispiel eine String Variable mitgeben, deren Text sie dann in das Konsolenfenster schreibt.
Wenn du möchtest, dass deine Funktion eine Variable als Parameter entgegennehmen kann, kannst du den Namen der Variable in die Klammern der Funktionsdefinition schreiben.
Beim Funktionsaufruf musst du dann die Variable die du als Parameter übergeben möchtest innerhalb der Klammern angeben.

def SagHallo(name):
    print(f"Hallo {name} =)")

SagHallo("Mia")
SagHallo("Peter")

### ERGEBNIS / AUSGABE ###
Hallo Mia =)
Hallo Peter =)
Deine Funktion kann auch mehrere Parameter entgegennehmen.
Die neuen Parameter kannst du sowohl bei der Definition als auch beim Aufruf der Funktion Komma separiert in den Klammern ergänzen.

def Addieren(zahl1, zahl2):
    print(zahl1 + zahl2)

Addieren(2, 3)

### ERGEBNIS / AUSGABE ###
5
Wenn du möchtest, dass deine Funktion nicht nur Code ausführt, sondern auch ein Ergebnis zurück liefert, kannst du das „return“ Schlüsselwort nutzen.
Nach „return“ kannst du den Namen einer Variable angeben, deren Wert als Rückgabewert zum Funktionsaufruf zurück gegeben wird.
Damit der Rückgabewert nicht einfach verloren geht, kannst du ihn in einer Variable speichern.

def Multiplizieren(zahl1, zahl2):
    ergebnis = zahl1 * zahl2
    return ergebnis

ergebnis = Multiplizieren(2, 3)
print(ergebnis)

### ERGEBNIS / AUSGABE ###
6
Und auch hier hast du die Möglichkeit gleich mehrere Rückgabewerte zurück zu geben indem du sie mit Komma separiert nach dem „return“ Schlüsselwort auflistest.
Beim speichern der Rückgabewerte in Variablen solltest du darauf achten, dass du auch genauso viele Variablen wie Rückgabewerte angibst.

def RechteckFlaecheUndUmfang(laenge, breite):
    flaeche = laenge * breite
    umfang = 2 * (laenge + breite)
    return flaeche, umfang

laenge = 2
breite = 3
flaeche, umfang = RechteckFlaecheUndUmfang(laenge, breite)
print(f"Länge = {laenge}; Breite = {breite}; Fläche = {flaeche}; Umfang = {umfang}")

### ERGEBNIS / AUSGABE ###
Länge = 2; Breite = 3; Fläche = 6; Umfang = 10
Wenn du Probleme oder Fragen zu dieser Lektion hast, dann schaue am besten in die Kommentare wo du schon viele Antworten finden wirst oder ich deine offenen Fragen schnellstmöglich beantworten werde.
Wenn du es geschafft hast deine eigenen Funktionen zu definieren, ihnen Parameter zu übergeben und ihre Rückgabewerte zu speichern, hast du eine weitere enorm wichtige Grundlage gelernt.
Herzlichen Glückwunsch zu diesem großen Schritt und ich freue mich schon sehr darauf, dich in der nächsten Lektion wiederzusehen =)