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.

  2. Si le / est présent dans la définition de la fonction, les arguments qui le précèdent sont uniquement positionnels.

  3. Les arguments uniquement positionnels ne peuvent pas être passés par mot-clé.

  4. 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

Sign in to your account

By continuing, you agree to our Terms of Service and Privacy Policy.