Arguments uniquement positionnels
En poursuivant votre apprentissage de Python, vous allez découvrir le concept des arguments de fonction. En Python, il existe plusieurs façons de passer des arguments à une fonction : les arguments par défaut, les arguments nommés et les arguments positionnels. Cependant, il existe un type particulier d'argument qui ne peut être fourni que par position et non par mot-clé, appelé arguments uniquement positionnels.
À partir de Python 3.8, il existe une syntaxe spéciale
/
dans les définitions de fonction pour indiquer que certains arguments sont uniquement positionnels. Les arguments uniquement positionnels apparaissent avant le /
dans la définition de la fonction.Considérez cette fonction qui additionne trois nombres :
def add_numbers(a, b, c):
return a + b + c
Nous pouvons appeler cette fonction en fournissant les arguments dans l'ordre où ils sont définis, c'est-à-dire par position :
print(add_numbers(10, 20, 30))
# outputs: 60
Et nous pouvons également l'appeler en utilisant les noms des arguments, c'est-à-dire en utilisant des mots-clés :
print(add_numbers(a=10, b=20, c=30))
# outputs: 60
Mais que se passe-t-il si nous voulons nous assurer que certains arguments sont toujours fournis dans un ordre spécifique ? C'est là que les arguments uniquement positionnels entrent en jeu. Modifions la fonction
add_numbers
pour que a
et b
soient uniquement positionnels :def add_numbers(a, b, /, c):
return a + b + c
Maintenant, nous pouvons toujours appeler cette fonction avec des arguments par position :
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
Cependant, si nous essayons de l'appeler en utilisant les arguments uniquement positionnels comme arguments nommés, nous obtiendrons une
TypeError
. Dans ce cas, nous devons fournir a
et b
par position. L'argument c
peut être fourni soit par position, soit par mot-clé :Ainsi, la syntaxe pour les arguments uniquement positionnels est :
- Les arguments uniquement positionnels viennent avant le
/
dans la définition de la fonction.
- Si le
/
est présent dans la définition de la fonction, les arguments qui le précèdent sont uniquement positionnels.
- Les arguments uniquement positionnels ne peuvent pas être passés par mot-clé.
- Les arguments après le
/
peuvent être passés par position ou par mot-clé.
Existe-t-il des fonctions intégrées en Python qui ont des arguments uniquement positionnels ?
Oui, de nombreuses fonctions intégrées en Python ont des arguments uniquement positionnels. La fonction
abs()
, par exemple, en est un bon exemple :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
Le paramètre
x
dans abs
est un argument uniquement positionnel, et lorsque nous essayons de le passer à l'appel de la fonction comme un argument nommé, le programme lève une TypeError
.