Strukturiere deinen Code in wiederverwendbare Funktionen, meistere Standardwerte und verstehe den Gültigkeitsbereich von Variablen.
Diese Lektion in Kodokon öffnenDu weißt bereits, wie man Schleifen und Bedingungen schreibt; jetzt ist es Zeit, deinen Code zu strukturieren. Eine Funktion kapselt eine bestimmte Aufgabe hinter einem klaren Namen: Du schreibst sie einmal, du testest sie einmal, du rufst sie überall auf. def deklariert die Funktion, die Parameter nehmen die Eingabewerte entgegen und return gibt das Ergebnis an den Aufrufer zurück. Merke dir eine oft übersehene Sache: Eine Funktion ohne return gibt None zurück.
def net_price(price, tax_rate):
total = price * (1 + tax_rate)
return round(total, 2)
result = net_price(100, 0.2)
print(result) # 120.0Standardwerte machen eine Funktion flexibel, ohne die Varianten zu vervielfachen: Deklariere sie nach den erforderlichen Parametern. Beim Aufruf dokumentieren benannte Argumente (currency="USD") deine Absicht. In professionellem Code nutzt du sie, sobald eine Funktion mehr als zwei Parameter hat: Der Aufruf ist klar lesbar, ohne dass man die Definition öffnen muss.
def format_price(amount, currency="EUR", digits=2):
return f"{amount:.{digits}f} {currency}"
print(format_price(19.9)) # 19.90 EUR
print(format_price(19.9, currency="USD")) # 19.90 USD
print(format_price(19.9, digits=0)) # 20 EURdef add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item("pen")) # ['pen']
print(add_item("book")) # ['book']Der Gültigkeitsbereich bestimmt, wo eine Variable existiert. Eine innerhalb einer Funktion erstellte Variable ist lokal: Sie verschwindet, wenn der Aufruf endet. Eine Funktion kann eine globale Variable lesen, aber jede Zuweisung erzeugt eine neue lokale Variable - die globale bleibt unberührt. Gute Gewohnheit: Statt globale Variablen zu verändern, übergib Parameter und gib Ergebnisse zurück; dein Code wird vorhersehbar und testbar.
rate = 0.2
def apply_tax(price):
return round(price * (1 + rate), 2)
def set_rate(new_rate):
rate = new_rate # local variable, no effect
print(apply_tax(100)) # 120.0
set_rate(0.1)
print(apply_tax(100)) # 120.0, the global is untouched