Positions- und Schlüsselwortargumente

Beim Programmieren in Python kann man Positionsargumente, Schlüsselwortargumente oder eine Mischung aus beiden verwenden, wenn man Funktionen definiert und aufruft. Der Einsatz dieser Argumente kann die Lesbarkeit und Flexibilität des Codes erhöhen.

Positionsargumente

Positionsargumente sind solche, die in der richtigen Reihenfolge an eine Funktion übergeben werden müssen. Hier ist ein Beispiel, in dem wir eine einfache Funktion erstellen, um einen vollständigen Namen zu generieren:
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'  # Kombiniert den Vor- und Nachnamen

print(full_name('Anna', 'Brown'))       # Gibt 'Anna Brown' aus
Im obigen Beispiel ist Anna das erste Argument und Brown das zweite Argument. Wenn wir die Reihenfolge der Argumente umkehren, erhalten wir andere Ergebnisse:
print(full_name('Brown', 'Anna'))       # Gibt 'Brown Anna' aus

Schlüsselwortargumente

Im Gegensatz dazu ermöglichen uns Schlüsselwortargumente, den Namen des Arguments anzugeben, wenn wir es an die Funktion übergeben, was die Lesbarkeit unseres Codes verbessert. Außerdem können wir sie verwenden, um Standardwerte für optionale Argumente festzulegen.
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'

print(full_name(last_name='Brown', first_name='Anna'))  # Gibt 'Anna Brown' aus
print(full_name(first_name='Anna', last_name='Brown'))  # Gibt 'Anna Brown' aus
Dies liefert die gleiche Ausgabe wie im ersten Beispiel, unabhängig von der Reihenfolge der Argumente.
 
💡
Es ist wichtig zu beachten, dass Schlüsselwortargumente beim Funktionsaufruf immer Positionsargumenten folgen müssen.
Wenn Schlüsselwortargumente vor Positionsargumenten in einem Funktionsaufruf verwendet werden, wird Python einen Syntaxfehler ausgeben. Diese Regel hilft Python, zwischen den beiden zu unterscheiden. Wenn Positionsargumente Schlüsselwortargumenten folgen, ist der Python-Interpreter verwirrt, weil er erwartet, dass alle Positionsargumente bereits definiert wurden. Hier ist ein Beispiel für einen falschen Funktionsaufruf, der einen SyntaxError erzeugt:
def greet(first_name, last_name):
    print('Hello', first_name, last_name)

greet(last_name='Doe', 'John')
# SyntaxError: positional argument follows keyword argument
Diese Regel stellt sicher, dass Funktionsaufrufe eindeutig sind, was den Code leichter verständlich und weniger fehleranfällig macht.

Kombination von Positions- und Schlüsselwortargumenten

Betrachten wir diese Funktion, die einen vollständigen Namen formatiert, inklusive des zweiten Vornamens:
# Standardwerte für Mittel- und Nachnamen (leere Strings)
def full_name(first, middle='', last=''):
    return first + ' ' + middle + ' ' + last

print(full_name('Anna', last='Brown'))                   # 'Anna  Brown'
print(full_name('Anna', middle='Louise', last='Brown'))  # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', last='Brown'))         # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', 'Brown'))              # 'Anna Louise Brown'
print(full_name(first='Anna', 'Louise', last='Brown'))   # SyntaxError
In diesem Beispiel wird der Vorname als Positionsargument übergeben, während der Nachname ein Schlüsselwortargument ist. Der zweite Vorname wird nicht angegeben, daher wird sein Standardwert (ein leerer String) verwendet.
Eine weitere wichtige Regel ist, dass, sobald Sie Schlüsselwortargumente verwenden, alle folgenden Argumente ebenfalls Schlüsselwortargumente sein sollten. Zum Beispiel würde print(full_name(first='Anna', 'Louise', last='Brown')) einen Fehler erzeugen, weil ein Positionsargument ('Louise') einem Schlüsselwortargument (first='Anna') folgt.
Abschließend betrachten wir ein komplexeres Beispiel aus der Praxis: eine Funktion, die die Gesamtkosten eines Einkaufs berechnet, mit optionalen Parametern für Steuern und Rabatt.
# Standardwerte für Steuern und Rabatt sind auf 0 gesetzt
def calculate_total_cost(price, tax=0.0, discount=0.0):
    return price + price * tax - discount

print(calculate_total_cost(100, tax=0.05))                # 105.0
print(calculate_total_cost(100, discount=10))             # 90.0
print(calculate_total_cost(100, tax=0.05, discount=10))   # 95.0
In diesem Fall ist der Preis ein erforderliches Positionsargument, während Steuern und Rabatt optionale Schlüsselwortargumente sind. Wenn sie nicht angegeben werden, nehmen sie ihre Standardwerte von 0 an.
 
To check your solution you need to sign in
Sign in to continue