Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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