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!
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?
- Sie machen Ihren Code lesbarer.
- Sie helfen anderen Entwicklern (und zukünftig dir!) deinen Code besser zu verstehen.
- 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