CodeGym /Kurse /Python SELF DE /Fortgeschrittene Arbeit mit Funktionsparametern

Fortgeschrittene Arbeit mit Funktionsparametern

Python SELF DE
Level 14 , Lektion 3
Verfügbar

7.1 Zugriff auf alle Funktionsargumente

In Python gibt es einige sehr praktische Möglichkeiten, um innerhalb einer Funktion die Liste aller an sie übergebenen Parameter zu erhalten. Lass uns diese durchgehen.

Verwendung von *args

*args ermöglicht es, eine variable Anzahl von positionsbasierte (gewöhnliche) Argumente an eine Funktion zu übergeben. Diese Argumente werden in einem Tupel verpackt und können innerhalb der Funktion bearbeitet werden.


def print_numbers(*args):
    for arg in args:
        print(arg)
        
print_numbers(1, 2, 3, 4, 5)

Erklärung

Die Funktion print_numbers nimmt eine beliebige Anzahl von positionsbasierten Argumenten entgegen, die in einem Tupel args verpackt sind. Wir können die Argumente innerhalb der Funktion mit einer for-Schleife durchlaufen.

Vorteile

  • Flexibilität: Ermöglicht es, eine beliebige Anzahl von Argumenten an eine Funktion zu übergeben.
  • Vielseitigkeit: Kann für Funktionen mit einer unbestimmten Anzahl von Parametern verwendet werden.

Verwendung von **kwargs

**kwargs ermöglicht es, eine variable Anzahl von benannten Argumenten an eine Funktion zu übergeben. Diese Argumente werden in einem Dictionary verpackt und können innerhalb der Funktion bearbeitet werden.


def print_person_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
        
print_person_info(name="Alice", age=30, city="New York")

Erklärung

Die Funktion print_person_info nimmt eine beliebige Anzahl von benannten Argumenten entgegen, die in einem Dictionary kwargs verpackt sind. Wir können die Argumente innerhalb der Funktion mit der Dictionary-Methode items() durchlaufen.

Vorteile

  • Flexibilität: Ermöglicht es, eine beliebige Anzahl von benannten Argumenten an eine Funktion zu übergeben.
  • Lesbarkeit: Benannte Argumente machen Funktionsaufrufe lesbarer.

7.2 Festlegen des Argumenttyps

Nur positionsbasierte Argumente

In Python 3.8 und höher kann man Funktionen mit positionsbasierten Argumenten definieren, die nur positionsbasiert übergeben werden können. Dies wird mit dem Symbol / in der Funktionsdefinition durchgeführt.


def greet(name, /, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Ausgabe: Hello, Alice!
greet("Alice", greeting="Hi")  # Ausgabe: Hi, Alice!
# greet(name="Alice")  # Fehler: TypeError

Erklärung

Die Funktion greet nimmt ein Argument name entgegen, das nur positionsbasiert übergeben werden kann. Argumente vor dem / können nur positionsbasiert übergeben werden.

Dieser Ansatz erlaubt es, die Art und Weise der Argumentübergabe einzuschränken, was die Lesbarkeit verbessert und Fehler vermeidet.

Nur benannte Argumente (Keyword-Only Arguments)

Ebenso kann man Funktionsparameter definieren, die nur benannt übergeben werden können. Dies wird mit dem Symbol * in der Funktionsdefinition durchgeführt.


def greet(*, name, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet(name="Alice")  # Ausgabe: Hello, Alice!
greet(name="Alice", greeting="Hi")  # Ausgabe: Hi, Alice!
# greet("Alice")  # Fehler: TypeError

Die Funktion greet nimmt ein Argument name entgegen, das nur benannt übergeben werden kann. Argumente nach dem * können nur benannt übergeben werden.

Dieser Ansatz zwingt dazu, die Argumentnamen explizit anzugeben, was die Lesbarkeit des Codes verbessert.

Kombination von positionsbasierten und benannten Argumenten

Man kann auch positionsbasierte und benannte Argumente kombinieren, um maximale Flexibilität zu erreichen.


def greet(name, /, *, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Ausgabe: Hello, Alice!
greet("Alice", greeting="Hi")  # Ausgabe: Hi, Alice!
# greet(name="Alice")  # Fehler: TypeError

Die Funktion greet nimmt ein Argument name entgegen, das nur positionsbasiert übergeben werden kann, und ein benanntes Argument greeting, das zwingend benannt übergeben werden muss. Die Verwendung von sowohl / als auch * ermöglicht die Kombination von positionsbasierten und benannten Argumenten.

Volles Beispiel für alle drei Szenarien:


def full_example(a, b, /, c, d, *, e, f):
    print(f"a={a}, b={b}, c={c}, d={d}, e={e}, f={f}")
        
# Funktionsaufruf mit verschiedenen Argumenten
full_example(1, 2, 3, 4, e=5, f=6)  # Alle Argumente korrekt übergeben
# full_example(a=1, b=2, c=3, d=4, e=5, f=6)  # Fehler: TypeError

Erläuterung

  • Nur positionsbasierte Argumente: a und b müssen nur positionsbasiert übergeben werden.
  • Gewöhnliche positionsbasierte oder benannte Argumente: c und d können sowohl positionsbasiert als auch benannt übergeben werden.
  • Nur benannte Argumente: e und f müssen nur benannt übergeben werden.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION