Nur positionsbezogene Argumente

Während Sie Python weiter erkunden, stoßen Sie auf das Konzept von Funktionsargumenten. In Python gibt es verschiedene Möglichkeiten, Argumente an eine Funktion zu übergeben. Wir können Standardargumente, Schlüsselwortargumente und Positionsargumente verwenden. Aber es gibt eine spezielle Art von Argumenten, die nur durch ihre Position und nicht durch ein Schlüsselwort übergeben werden können, bekannt als nur positionsbezogene Argumente.
Seit Python 3.8 gibt es eine spezielle Syntax / in Funktionsdefinitionen, um anzuzeigen, dass einige Argumente nur positionsbezogen sind. Nur positionsbezogene Argumente erscheinen vor einem / in der Funktionsdefinition.
Betrachten Sie diese Funktion, die drei Zahlen addiert:
def add_numbers(a, b, c):
    return a + b + c
Wir können diese Funktion aufrufen, indem wir die Argumente in der Reihenfolge angeben, in der sie definiert sind, also positionsbezogen:
print(add_numbers(10, 20, 30))
# Ausgabe: 60
Und wir können sie auch mit den Namen der Argumente aufrufen, also durch Schlüsselwort:
print(add_numbers(a=10, b=20, c=30))
# Ausgabe: 60
Aber was ist, wenn wir sicherstellen wollen, dass einige Argumente immer in einer bestimmten Reihenfolge übergeben werden? Hier kommen nur positionsbezogene Argumente ins Spiel. Lassen Sie uns die Funktion add_numbers modifizieren, um a und b nur positionsbezogen zu machen:
def add_numbers(a, b, /, c):
    return a + b + c
Jetzt können wir diese Funktion immer noch mit Argumenten nach Position aufrufen:
print(add_numbers(10, 20, 30))         # 60
print(add_numbers(a=10, b=20, c=30))   # TypeError
print(add_numbers(10, 20, c=30))       # 60
Wenn wir jedoch versuchen, die nur positionsbezogenen Argumente als Schlüsselwortargumente zu übergeben, erhalten wir einen TypeError. In diesem Fall müssen wir a und b positionsbezogen angeben. Das Argument c kann entweder positionsbezogen oder per Schlüsselwort übergeben werden.
 
Die Syntax für nur positionsbezogene Argumente lautet also:
  1. Die nur positionsbezogenen Argumente stehen vor einem / in der Funktionsdefinition.
  1. Wenn in der Funktionsdefinition ein / vorhanden ist, sind die Argumente davor nur positionsbezogen.
  1. Nur positionsbezogene Argumente können nicht per Schlüsselwort übergeben werden.
  1. Argumente nach dem / können positionsbezogen oder per Schlüsselwort übergeben werden.
Gibt es eingebaute Funktionen in Python, die nur positionsbezogene Argumente haben?
Ja, viele eingebaute Python-Funktionen haben nur positionsbezogene Argumente. Die Funktion abs() ist zum Beispiel ein gutes Beispiel:
help(abs)
# Help on built-in function abs in module builtins:
# abs(x, /)
#     Return the absolute value of the argument.

abs(-6)    # 6
abs(x=-6)  # TypeError: abs() takes no keyword arguments
Der Parameter x in abs ist ein nur positionsbezogenes Argument, und wenn wir versuchen, es als Schlüsselwortargument zu übergeben, wirft das Programm einen TypeError.
 
To check your solution you need to sign in
Sign in to continue