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 + cNous 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: 60Et 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: 60Mais 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 + cMaintenant, 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)) # 60Cependant, 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 argumentsLe 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.