Zum Inhalt springen
BetaEN
Lektion 33 von 35Python

Python · Lektion 33 · 20 Minuten

Type Hints – Typen angeben

Das lernst du

  • Parameter und Rückgabewerte mit Typen beschriften
  • list[int], dict[str, int] und Optionales lesen
  • Dataclasses für einfache Datenobjekte nutzen

Was steckt in der Variable?

Python ist es egal, welchen Typ eine Variable hat. Für Menschen (und Editoren) ist es aber sehr hilfreich zu wissen, was eine Funktion erwartet. Type Hints schreiben das direkt dazu:

def begruessung(name: str, alter: int) -> str:
    return f"{name} ist {alter} Jahre alt."

print(begruessung("Mia", 12))
print(begruessung.__annotations__)

Hinter dem Doppelpunkt steht der Typ eines Parameters, hinter -> der Typ des Rückgabewerts.

Wichtig: Python prüft die Typen beim Ausführen nicht. Hints sind Beschriftungen – Werkzeuge wie mypy oder dein Editor warnen dich damit aber vor Fehlern, bevor das Programm läuft.

Typen für Listen und Dictionaries

def bestes_team(punkte: dict[str, int]) -> str:
    return max(punkte, key=punkte.get)

def nur_gerade(zahlen: list[int]) -> list[int]:
    return [z for z in zahlen if z % 2 == 0]

def finde(namen: list[str], gesucht: str) -> int | None:
    if gesucht in namen:
        return namen.index(gesucht)
    return None

print(bestes_team({"Rot": 3, "Blau": 7}))
print(nur_gerade([1, 2, 3, 4]))
print(finde(["Mia", "Ben"], "Tom"))

int | None bedeutet: „eine Zahl – oder gar nichts“.

Dataclasses

Für Klassen, die vor allem Daten speichern, gibt es eine Abkürzung. @dataclass schreibt __init__ und eine schöne Anzeige für dich – aus den Type Hints:

from dataclasses import dataclass

@dataclass
class Roboter:
    name: str
    akku: int = 100

r = Roboter("Robo")
print(r)
r.akku -= 15
print(r.akku)

Kurz-Check

Bevor es an die Aufgabe geht: Was gibt dieses Programm aus? Tipp deine Vermutung ein – Python rechnet danach nach.

def flaeche(breite: int, hoehe: int) -> int:
    return breite * hoehe


print(flaeche(3, 4), flaeche("ab", 2))

Deine Aufgabe

Jetzt bist du dran

Ergänze die Funktion durchschnitt mit Type Hints: Sie bekommt eine Liste von Kommazahlen (list[float]) und gibt eine Kommazahl (float) zurück. Bei einer leeren Liste soll sie 0.0 liefern. Erstelle außerdem eine Dataclass Spieler mit name: str und punkte: int.

from dataclasses import dataclass


def durchschnitt(werte):
    return sum(werte) / len(werte)


# Dataclass Spieler


print(durchschnitt([2.0, 3.0, 4.0]))
print(durchschnitt([]))

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:

from dataclasses import dataclass


def durchschnitt(werte: list[float]) -> float:
    if not werte:
        return 0.0
    return sum(werte) / len(werte)


@dataclass
class Spieler:
    name: str
    punkte: int


print(durchschnitt([2.0, 3.0, 4.0]))
print(durchschnitt([]))