Eigene Funktionen schreiben
def hello():
print("hello marc")
hello()
hello marc
Mit def
können wir eine komplett neue Funktion definieren.
Nach dem "def" kommt der Name der Funktion.
Du kannst dich für egal welchen Namen auch immer entscheiden.
Vergesse die ()
Klammern nicht direkt nach dem Namen der Funktion.
Diese sind nicht nur notwendig, damit wir keinen "SyntaxError" bekommen,
sondern sie haben auch eine Zweck, auf den wir noch später zurück kommen werden.
Der indentierte Block and Code ist der Körper unserer Funktion. Dieser wird immer ausgeführt, wenn wir die Funktion aufrufen.
Wie du in der letzten Zeile sehen kannst,
führen wir unsere Funktion mit den selben Namen und den ()
Klammern aus
und deswegen sehen wir dann auch "hello marc" in der Konsole.
Probiere es einmal selber aus!
Ok soweit so gut, aber was wenn wir mehrere Leute begrüßen wollen, dann müssten wir entweder unsere Funktion erweitern oder mehrere verschiedene Funktionen schreiben. Zum Beispiel so:
def hello_marc():
print("hello marc")
def hello_leon():
print("hello leon")
hello_marc()
hello_leon()
hello marc
hello leon
Das ist aber zu viel copy-paste, meiner Meinung nach.
Wir können innerhalb der ()
Klammern auch Variablen definieren,
sogenannte Funktionsparameter, um bei jedem Aufruf,
einen anderen Namen unserer "hello" Funktion zu übermitteln.
def hello(name):
print("hello", name)
hello("marc")
hello("leon")
hello marc
hello leon
Jedoch wenn wir jezte beim Aufrufen unserer Funktion vergessen einen Namen in die ()
Klammern einzugeben,
dann bekommen wir einen Error!
hello()
Traceback (most recent call last):
File "/home/marc/main.py", line 1, in <module>
hello()
~~~~~^^
TypeError: hello() missing 1 required positional argument: 'name'
Wie man am Error schon erkennen kann, fehlt der "argument" "name", beim Aufrufen der "hello" Funktion. Diesen Error können wir beheben, indem wir für "name" einen "default" definieren. Lass uns diesen mal schnell definieren:
def hello(name = "stranger"):
print("hello", name)
hello("marc")
hello("leon")
hello()
hello marc
hello leon
hello stranger
Schon viel viel besser, aber was wenn wir auch noch die Begrüßung für ein paar Personen anpassen wollen? Lass uns dafür ein zweiten "greeting" Funktionsparameter mit einem Defaultwert definieren, sodass wir deisen bei belieben überschreiben können, wenn wir die "hello" Funktion aufrufen.
def hello(greeting = "hello", name = "stranger"):
print(greeting, name)
hello("hi", "marc")
hello(name = "leon")
hello("what's up")
hi marc
hello leon
what's up stranger
Unsere "hello" Funktion ist jetzt fertig geschrieben.
In Python haben wir viele verschiedene Arten diese aufzurufen, wie du es schon am vorherigen Beispiel vielleicht erkennen konntest.
Wir können die Werte in der Reihenfolge der Parameter übergeben. Sprich der erste Wert wird zum ersten Funktionsparameter von "hello" weiter gegeben und der zweite zum zweiten der Funktion:
hello("hi", "marc")
hi marc
Statt sich auf die Reihenfolge zu verlassen, kannst du auch die Parameter explizit benennen:
hello(greeting = "hi", name = "marc")
hello(name = "marc", greeting = "hi")
hi marc
hi marc
Oder du kannst auch mischen und machen was auch immer du willst:
hello("hi", name = "marc")
hi marc