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 :
  1. Les arguments uniquement positionnels viennent avant le / dans la définition de la fonction.
  1. Si le / est présent dans la définition de la fonction, les arguments qui le précèdent sont uniquement positionnels.
  1. Les arguments uniquement positionnels ne peuvent pas être passés par mot-clé.
  1. 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.
 
To check your solution you need to sign in
Sign in to continue