Schrägstrich (/) zeigt an, dass alle Argumente davor nur Positionsargumente sind. Die Funktion "Nur Positionsargumente" wurde in Python 3.8 hinzugefügt, nachdem PEP 570 akzeptiert wurde. Ursprünglich wurde diese Notation in PEP 457 - Notation für Notation für Nur-Position-Parameter definiert
Parameter in der Funktionsdefinition vor dem Schrägstrich (/) sind nur positionell und Parameter, denen ein Schrägstrich (/) folgt, können gemäß der Syntax beliebig sein. Wenn Argumente nur Positionsparametern zugeordnet werden, die ausschließlich auf ihrer Position beim Aufrufen einer Funktion basieren. Das Übergeben von Nur-Positionsparametern durch Schlüsselwörter (Name) ist ungültig.
Nehmen wir folgendes Beispiel
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
Hier in der obigen Funktionsdefinition sind die Parameter a und b nur positionell, während x oder y entweder positionell oder Schlüsselwort sein können.
Folgende Funktionsaufrufe sind gültig
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
Der folgende Funktionsaufruf ist jedoch ungültig, wodurch eine Ausnahme TypeError ausgelöst wird, da a, b nicht als Positionsargumente, sondern als Schlüsselwort übergeben werden
foo(a=1.45, b=3.14, x=1, y=4)
TypeError: foo () hat einige Nur-Positions-Argumente als Schlüsselwort-Argumente übergeben: 'a, b'
Viele in Python integrierte Funktionen akzeptieren nur Positionsargumente, bei denen das Übergeben von Argumenten per Schlüsselwort keinen Sinn ergibt. Zum Beispiel akzeptiert die eingebaute Funktion len nur ein Positionsargument (nur). Wenn das Aufrufen von len als len (obj = "Hallo Welt") die Lesbarkeit beeinträchtigt, überprüfen Sie die Hilfe (len).
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
Nur Positionsparameter erleichtern die Wartung der zugrunde liegenden c / library-Funktionen. Damit können Parameternamen von nur Positionsparametern in Zukunft geändert werden, ohne dass das Risiko besteht, dass der Clientcode, der die API verwendet, beschädigt wird
Last but not least können wir nur mit Positionsparametern ihre Namen für Schlüsselwortargumente mit variabler Länge verwenden. Überprüfen Sie das folgende Beispiel
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
Nur Positionsparameter sind hier besser unter Typen von Funktionsargumenten in Python: Nur Positionsparameter
Die Syntax nur für Positionsparameter wurde offiziell zu python3.8 hinzugefügt. Überprüfen Sie, was neu ist. Python3.8 - Nur Positionsargumente
PEP-bezogen: PEP 570 - Nur Python-Positionsparameter
/
Tokens, weil "es die umgekehrte Operation von*
" ist, zeigt, dass Python nur ein bisschen verrückt ist. Es ist eine Art Synästhesie.