La barre oblique (/) indique que tous les arguments antérieurs sont uniquement des arguments positionnels. La fonctionnalité d'arguments positionnels uniquement a été ajoutée dans python 3.8 après l' acceptation de PEP 570 . Initialement, cette notation a été définie dans PEP 457 - Notation pour la notation pour les paramètres de position uniquement
Les paramètres de la définition de fonction avant la barre oblique Foraward (/) sont uniquement positionnels et les paramètres suivis d'une barre oblique (/) peuvent être de n'importe quel type selon la syntaxe. Où les arguments sont mappés à des paramètres positionnels uniquement en fonction de leur position lors de l'appel d'une fonction. La transmission de paramètres de position uniquement par mots-clés (nom) n'est pas valide.
Prenons l'exemple suivant
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
Ici, dans la définition de fonction ci-dessus, les paramètres a et b sont uniquement positionnels, tandis que x ou y peuvent être positionnels ou mots clés.
Les appels de fonction suivants sont valides
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
Mais, l'appel de fonction suivant n'est pas valide, ce qui déclenche une exception TypeError car a, b ne sont pas passés en tant qu'arguments de position à la place en tant que mot-clé
foo(a=1.45, b=3.14, x=1, y=4)
TypeError: foo () a reçu des arguments positionnels uniquement passés comme arguments de mot-clé: 'a, b'
De nombreuses fonctions intégrées en python n'acceptent que des arguments positionnels où passer des arguments par mot-clé n'a pas de sens. Par exemple, la fonction intégrée len n'accepte qu'un seul argument positionnel (uniquement), Où appeler len comme len (obj = "hello world") nuit à la lisibilité, vérifiez help (len).
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
Les paramètres uniquement positionnels facilitent la maintenance des fonctions c / library sous-jacentes. Il permet aux noms de paramètres des paramètres uniquement positionnels d'être modifiés à l'avenir sans risque de rupture du code client qui utilise l'API
Enfin et surtout, les paramètres positionnels uniquement nous permettent d'utiliser leurs noms pour être utilisés dans des arguments de mots-clés de longueur variable. Vérifiez l'exemple suivant
>>> 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}
Les paramètres uniquement positionnels sont mieux expliqués ici à Types d'arguments de fonction en python: Paramètres positionnels uniquement
La syntaxe des paramètres de position uniquement a été officiellement ajoutée à python3.8. Commander les nouveautés python3.8 - arguments que position
Lié à PEP: PEP 570 - Paramètres de position uniquement Python
/
jeton, parce que "c'est l'opération inverse de*
" montre que Python est juste un peu fou. C'est une sorte de synesthésie.