Python - Funktionsschreibweisen: Ein Anfängerleitfaden

Hallo, aufstrebende Python-Programmierer! Heute tauchen wir in die faszinierende Welt der Funktionsschreibweisen ein. Keine Sorge, wenn du neu bei der Programmierung bist – ich werde dich Schritt für Schritt durch dieses Konzept führen, genau wie ich es für unzählige Studenten in meinen Jahren des Unterrichtens getan habe. Also, nimm dir dein Lieblingsgetränk, mache dich komfortabel und lass uns gemeinsam auf diese Python-Abenteuerreise aufbrechen!

Python - Function Annotations

Was sind Funktionsschreibweisen?

Funktionsschreibweisen sind eine Funktion in Python, die es uns ermöglicht, Metadaten zu Funktionenparametern und Rückgabewerten hinzuzufügen. Stell dir vor, sie sind wie kleine Notizen, die wir unseren Funktionen hinzufügen, um zusätzliche Informationen bereitzustellen. Sie beeinflussen nicht, wie die Funktion funktioniert, können aber sehr nützlich für Dokumentation und Typprüfung sein.

Beginnen wir mit einem einfachen Beispiel:

def begrüßen(name: str) -> str:
return f"Hallo, {name}!"

In diesem Beispiel ist : str nach name eine Schreibweise, die darauf hinweist, dass name eine Zeichenkette sein sollte. Das -> str am Ende deutet darauf hin, dass die Funktion eine Zeichenkette zurückgibt.

Warum sollten Funktionsschreibweisen verwendet werden?

  1. Sie machen Ihren Code lesbarer.
  2. Sie helfen anderen Entwicklern (und zukünftig dir!) deinen Code besser zu verstehen.
  3. Sie können von Typprüfungstools verwendet werden, um potenzielle Fehler zu fangen.

Nun tauchen wir tiefer in die verschiedenen Arten von Schreibweisen ein!

Funktionsschreibweisen mit Parametern

Wir können Funktionenparameter annotieren, um zu angeben, welche Art von Daten wir erwarten. Hier ist ein Beispiel:

def berechne_fläche(länge: float, breite: float) -> float:
return länge * breite

In dieser Funktion sagen wir, dass sowohl länge als auch breite Fließkommazahlen sein sollten, und die Funktion wird eine Fließkommazahl zurückgeben.

Versuchen wir sie zu verwenden:

fläche = berechne_fläche(5.5, 3.2)
print(f"Die Fläche beträgt: {fläche}")

Output:

Die Fläche beträgt: 17.6

Beachte, diese Schreibweisen erzwingen keine Typen – du könntest immer noch berechne_fläche("hallo", "welt") aufrufen, aber das würde nicht viel Sinn machen!

Funktionsschreibweisen mit Rückgabetyp

Wir haben bereits die -> float Schreibweise für den Rückgabetyp gesehen, aber schauen wir uns ein komplexeres Beispiel an:

def get_user_info(user_id: int) -> dict:
# Stell dir vor, diese Funktion holt Benutzerdaten aus einer Datenbank
return {
"id": user_id,
"name": "Alice",
"age": 30,
"email": "[email protected]"
}

benutzer = get_user_info(12345)
print(f"Benutzername: {benutzer['name']}")

Output:

Benutzername: Alice

Hier geben wir an, dass die Funktion eine ganze Zahl user_id erwartet und ein Wörterbuch zurückgibt.

Funktionsschreibweisen mit Ausdrücken

Schreibweisen müssen nicht nur einfache Typen sein – sie können auch komplexere Ausdrücke sein. Hier ist ein Beispiel:

from typing import List, Union

def verarbeite_elemente(elemente: List[Union[int, str]]) -> List[str]:
return [str(element).upper() for element in elemente]

ergebnis = verarbeite_elemente([1, "hallo", 42, "welt"])
print(ergebnis)

Output:

['1', 'HALLO', '42', 'WELT']

In diesem Beispiel bedeutet List[Union[int, str]], dass die Funktion erwartet, dass eine Liste ist, bei der jedes Element entweder eine ganze Zahl oder eine Zeichenkette sein kann.

Funktionsschreibweisen mit Standardargumenten

Wir können Schreibweisen mit Standardargumenten kombinieren. So geht das:

def begrüße_benutzer(name: str = "Gast") -> str:
return f"Willkommen, {name}!"

print(begrüße_benutzer())
print(begrüße_benutzer("Alice"))

Output:

Willkommen, Gast!
Willkommen, Alice!

In dieser Funktion geben wir an, dass name eine Zeichenkette sein sollte, und wenn kein Name bereitgestellt wird, wird der Standardwert "Gast" verwendet.

Alles zusammen

Nun schauen wir uns ein komplexeres Beispiel an, das verschiedene Schreibweisen kombiniert:

from typing import List, Dict, Union

def analysiere_verkäufe(daten: List[Dict[str, Union[str, float]]]) -> Dict[str, float]:
gesamtverkäufe = 0.0
verkaufte_artikel = 0

for transaktion in daten:
gesamtverkäufe += transaktion['amount']
verkaufte_artikel += 1

return {
"gesamtverkäufe": gesamtverkäufe,
"durchschnittsverkauf": gesamtverkäufe / verkaufte_artikel if verkaufte_artikel > 0 else 0
}

verkaufsdaten = [
{"item": "Widget A", "amount": 10.99},
{"item": "Widget B", "amount": 5.99},
{"item": "Widget C", "amount": 15.99}
]

ergebnis = analysiere_verkäufe(verkaufsdaten)
print(f"Gesamtverkäufe: ${ergebnis['gesamtverkäufe']:.2f}")
print(f"Durchschnittsverkauf: ${ergebnis['durchschnittsverkauf']:.2f}")

Output:

Gesamtverkäufe: $32.97
Durchschnittsverkauf: $10.99

Dieses Beispiel zeigt, wie wir komplexe Schreibweisen verwenden können, um die Struktur unserer Eingangsdaten und des Rückgabewertes zu beschreiben.

Zusammenfassung der Methoden für Funktionsschreibweisen

Hier ist eine Tabelle, die die verschiedenen Möglichkeiten der Verwendung von Funktionsschreibweisen zusammenfasst:

Methode Beispiel Beschreibung
Parameter-Schreibweise def func(x: int): Suggests the type for a parameter
Rückgabetyp-Schreibweise def func() -> str: Suggests the return type of the function
Standardwert mit Schreibweise def func(x: int = 0): Combines a type suggestion with a default value
Komplexer Typ-Schreibweise def func(x: List[int]): Uses types from the typing module for more specific type hints
Mehrere Typen (Union) def func(x: Union[int, str]): Suggests that a parameter can be one of several types

Beachte, diese Schreibweisen sind Hinweise und keine strenge Vorschrift. Python wird dich nicht daran hindern, verschiedene Typen zu verwenden, aber Tools wie mypy können diese Schreibweisen verwenden, um potenzielle Fehler zu fangen, bevor du deinen Code ausführst.

Und so haben wir es, meine lieben Studenten! Wir haben die Welt der Python-Funktionsschreibweisen erkundet. Ich hoffe, dieser Leitfaden hat dieses Konzept für dich erhellt. Denke daran, das beste Lernen geschieht durch Handeln, also zögere nicht, diese Schreibweisen in deinem eigenen Code zu experimentieren. Frohes Coden, und möge dein Code immer gut annotiert sein!

Credits: Image by storyset