Funktionen
Inhalt
Funktionen¶
Funktionen sind eines der wichtigsten Konzepte von Programmiersprachen. In der Praxis müssen wir oft dieselben Aufgaben wieder und wieder lösen. Diese Codeblöcke können wir nun in Funktionen auslagern und bei Bedarf aufrufen. Dadurch brauchen wir den Code nicht wiederholt schreiben, was zu deutlich weniger Fehler führt. Weiters könne Funktion auch besser gewartet und getestet werden.
Die Syntax für Funktionen in Python lautet:
def function_name(parameters):
"""docstring"""
statement(s)
Diese besteht also aus dem Funktionsnamen (funtion_name), den Parametern (parameters), dem Dokumentationsstring (docstring) und weiteren Pythoncode (statements).
Minimale leere Funktionen¶
In vielen Tutorials findet man die folgenden minimalen Funktionen.
def f1():
pass
f1()
def f2():
...
f2()
def f3():
"""ToDo: Implement"""
f3()
Wir sehen, dass alle 3 Funktionen gültige Python-Funktionen sind. Als minimale leere Python-Funktion wollen wir aber das folgende Muster verwenden.
def f():
"""description of the function"""
pass
f()
Wenn wir also eine leere Funktion definieren, so sollten wir diese minimale Muster verwenden.
Mit help()
können wir den docstring auslesen.
help(f)
Help on function f in module __main__:
f()
description of the function
Einfache Funktonen schreiben¶
Wir halten uns nun immer an das Muster für Python-Funktionen:
def function_name(parameters):
"""docstring"""
statement(s)
Um mit dem Muster einer minimalen Python-Funktion vertraut zu werden, wollen wir nun die Methoden add
, sub
, mul
und div
als Python-Funktionen implementieren.
def add(x,y):
"""returns x plus y"""
return x + y
add(2,3)
5
def sub(x,y):
"""returns x minus y"""
return x - y
sub(2,3)
-1
def mul(x,y):
"""returns x times y"""
return x*y
mul(2,3)
6
def div(x,y):
"""returns x divided by y"""
return x/y
div(2,3)
0.6666666666666666
Rückgabewerte von Funktionen¶
In den obigen Beispielen wurde immer nur ein Rückgabewert von der Funktion zurückgegeben.
def f_single_return():
"returns a constant"
return 3.14
f_single_return()
3.14
Wenn eine Funktion nur einen Wert zurück gibt, so erhalten wir eine Instanz eines Datentyps. Im nächsten Beispiel sollen mehrere Werte zurückgegeben werden.
def f_multi_return():
"returns some values"
return 3.14, "pi"
f_multi_return()
(3.14, 'pi')
type(f_multi_return())
tuple
Werden also mehrere Werte von einer Funktion zurückgeben, so erhalten wir ein Tuple mit den Rückgabewerten.
Dieses Tuple könnten wir wie schon bekannt einfach entpacken.
pi, name = f_multi_return()
print(pi)
print(name)
3.14
pi
Durch das Benutzen von []
werden die Rückgabewerte in Listen verpackt.
def f_multi_return_list():
"returns a constant"
return [3.14, "pi"]
f_multi_return_list()
[3.14, 'pi']
type(f_multi_return_list())
list
Auch die Listen können wir wieder direkt entpacken.
pi, name = f_multi_return_list()
print(pi)
print(name)
3.14
pi
Hilfe für Funktionen¶
Als erstes sollten wir immer help()
verwenden, um uns über eine Funktion zu informieren.
help(add)
Help on function add in module __main__:
add(x, y)
returns x plus y
Der Vollständigkeit halber wollen wir noch ein paar andere Möglichkeiten aufzeigen, da diese in Foren anzutreffen sind. Der docstring kann mit
add.__doc__
'returns x plus y'
ausgelesen werden. Sauberer ist es jedoch das Modul inspect
der Python-Standardbibliothek zur verwenden.
import inspect
inspect.getdoc(add)
'returns x plus y'
Mit function?
und function??
erhalten wir weiter Infos.
add?
Signature: add(x, y)
Docstring: returns x plus y
File: /tmp/ipykernel_32639/2886208130.py
Type: function
add??
Signature: add(x, y)
Source:
def add(x,y):
"""returns x plus y"""
return x + y
File: /tmp/ipykernel_32639/2886208130.py
Type: function
Default-Werte im Argument¶
Default-Werte im Argument sind oft sehr hilfreich um Routineaufgaben abzuarbeiten.
def greet(name, message='Hi'):
return f"{message} {name}"
greet(name="Peter")
'Hi Peter'
Wir sehen also, dass wir nur einen Parameter als Argument übergeben müssen. Wollen wir nun den Gruß verändern, müssen wir auch den zweiten Parameter übergeben.
print(greet(name='Peter',message='Hallo'))
print(greet(name='Hans',message='Servus'))
Hallo Peter
Servus Hans