11.1 Unendliche Anzahl von Parametern
In Python können Funktionen so entwickelt werden, dass sie eine unendliche Anzahl von Parametern akzeptieren. Dies wird durch Argumente erreicht, die mit *args für normale Parameter und **kwargs für benannte Parameter übergeben werden.
Verwendung von *args
*args ermöglicht es einer Funktion, eine beliebige Anzahl von Positionsargumenten zu akzeptieren, die die Funktion als Tupel behandelt. Beispiel für die Verwendung:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # gibt 1, apple und True aus.
Die Variable args enthält das Tupel aller Parameter, die der Funktion beim Aufruf übergeben wurden.
Verwendung von **kwargs
**kwargs funktioniert ähnlich wie *args, aber für benannte Argumente, die als Wörterbuch dargestellt werden. Dadurch kann die Funktion eine beliebige Anzahl benannter Argumente akzeptieren:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # gibt fruit: apple und number: 1 aus
Diese Mechanismen machen Funktionen äußerst flexibel und nützlich in Szenarien, in denen die Anzahl der Parameter im Voraus unbekannt ist, beispielsweise bei der Entwicklung von API oder Event-Handling-Funktionen.
Wir werden beide Fälle später ausführlicher behandeln, aber du solltest wissen, dass man in Python innerhalb einer Funktion sehr einfach auf alle Argumente zugreifen kann, die übergeben wurden. Und du kannst der Funktion alles übergeben, was du möchtest.
11.2 Typangaben
Wie du weißt, haben Variablen in Python keinen im Voraus festgelegten Typ. Einer Variablen kann ein Wert eines beliebigen Typs zugewiesen werden, und in der nächsten Zeile ein Wert eines neuen Typs usw.
Das ist sehr praktisch für kleine Programme und nicht so praktisch für große. Wenn ein Programm sehr groß ist und die Anzahl der Funktionen in die Tausende geht, kann sich der Programmierer nicht merken, welche Daten genau an die Funktion übergeben werden müssen und in welcher Reihenfolge.
In statisch typisierten Sprachen gibt die IDE den Programmierern selbst Hinweise darauf, welche Parameter und mit welchen Typen beim Aufruf der Funktion übergeben werden müssen. Und Python ist schließlich eine Sprache mit dynamischer Typisierung, und hier fehlen solche Hinweise.
Deshalb haben die Entwickler von Python etwas wie Type Hinting erfunden. Das ist etwas Ähnliches wie Variablentypen, aber sie sind eher Empfehlungen als Typen. Die angegebenen Typen bringen keine Einschränkungen mit sich.
Die Typangabe wurde in Python 3.5 eingeführt und wurde durch den Standard PEP 484 populär. Es ist ein Mechanismus, der es Programmierern ermöglicht, die erwarteten Typen von Variablen, Argumenten und Rückgabewerten von Funktionen zu definieren.
Obwohl Python eine dynamisch typisierte Sprache bleibt, fügt die Typangabe Klarheit hinzu und unterstützt die statische Typprüfung. Beispiele für Typangaben:
def add_numbers(a: int, b: int) -> int:
return a + b
Der Typ der Variable wird durch Doppelpunkt angegeben, und der Typ des Rückgabewerts der Funktion durch Pfeil.
Vorteile, die die Typangabe-Empfehlung bietet:
- Verbesserung der Dokumentation: Die explizite Angabe von Typen macht den Code selbstdokumentierend.
- Besseres Autovervollständigen: Code-Editoren können Typinformationen verwenden, um die Autovervollständigung zu verbessern.
- Hilfe bei der Fehlersuche: Die statische Typprüfung kann potenzielle Fehler erkennen, bevor das Programm ausgeführt wird.
Werkzeuge zur Arbeit mit Typen
Python selbst reagiert in keiner Weise auf die deklarierten Typen von Variablen. Stattdessen gibt es in Python ein spezielles Werkzeug — mypy — ein beliebter statischer Typen-Analysator, der hilft, Fehler im Code zu entdecken, der Typangaben verwendet.
GO TO FULL VERSION