127 votes

Argument de position vs argument de mot-clé

Sur la base de cette

Un argument positionnel est un nom qui n'est pas suivi d'un signe égal. (=) et d'une valeur par défaut.

Un mot-clé est suivi d'un signe égal et d'une expression qui donne sa valeur par défaut.

def rectangleArea(width, height):
    return width * height

print rectangleArea(width=1, height=2)

Pregunta. Je suppose que les deux width y height sont des arguments de position. Dans ce cas, pourquoi ne pouvons-nous pas l'appeler avec la syntaxe des arguments par mot-clé ?

194voto

paxdiablo Points 341644

Le texte que vous citez semble confondre deux choses totalement différentes :

Je soupçonne que les personnes qui ont élaboré ce didacticiel n'étaient pas totalement familier avec Python :-) C'est pourquoi le lien que vous fournissez n'est pas de très bonne qualité.


Dans votre appel à votre fonction, vous utilisez la fonction "keyword argument" (où l'argument est nommé plutôt que de se fier à sa position). Sans cela, les valeurs sont liées aux noms en fonction de l'ordre uniquement. Ainsi, dans cet exemple, les deux appels ci-dessous sont équivalents :

def process_a_and_b(a, b):
   blah_blah_blah()

process_a_and_b(1, 2)
process_a_and_b(b=2, a=1)

A titre d'exemple, voir la définition et les appels suivants :

def fn(a, b, c=1):        # a/b required, c optional.
    return a * b + c

print(fn(1, 2))            # returns 3, positional and default.
print(fn(1, 2, 3))         # returns 5, positional.
print(fn(c=5, b=2, a=2))   # returns 9, named.
print(fn(b=2, a=2))        # returns 5, named and default.
print(fn(5, c=2, b=1))     # returns 7, positional and named.
print(fn(8, b=0))          # returns 1, positional, named and default.

101voto

Nazime Lakehal Points 76

Les paramètres de position, les paramètres de mot-clé, les paramètres obligatoires et les paramètres optionnels sont souvent confondus. Paramètres de position ne sont pas les mêmes que les paramètres obligatoires et les paramètres clés ne sont pas les mêmes que paramètres facultatifs.

Paramètres positionnels (uniquement) sont liés aux arguments positionnels fournis dans un appel, c'est-à-dire par la position. Ils ont été introduits dans Python 3.8 .

Paramètres de mot-clé (uniquement) sont liés à des arguments de type mot-clé fournis dans un appel, c'est-à-dire par leur nom.

Paramètres de position ou de mot-clé sont liés à des arguments positionnels ou à des mots-clés fournis dans un appel, c'est-à-dire soit par position, soit par nom.

Paramètres requis sont liés aux arguments fournis lors d'un appel.

Paramètres facultatifs sont liés aux arguments par défaut fournis dans une définition.

Il s'agit de la syntaxe Python pour la déclaration des paramètres :

def f(positional_parameter, /, positional_or_keyword_parameter, *, keyword_parameter):
    pass
  • Paramètre positionnel requis (depuis Python 3.8) :

    def f(a, /):
        pass
    
    f()  # error, argument is required
    f(1)  # allowed, positional argument
    f(a=1)  # error, keyword argument
  • Paramètre positionnel optionnel (depuis Python 3.8) :

    def f(a=2, /):
        pass
    
    f()  # allowed, argument is optional
    f(1)  # allowed, positional argument
    f(a=1)  # error, keyword argument
  • Paramètre de mot-clé requis :

    def f(*, a):
        pass
    
    f()  # error, argument is required
    f(1)  # error, positional argument
    f(a=1)  # allowed, keyword argument
  • Paramètre de mot-clé facultatif :

    def f(*, a=1):
        pass
    
    f()  # allowed, argument is optional
    f(1)  # error, positional argument
    f(a=1)  # allowed, keyword argument
  • Paramètre positionnel ou mot-clé requis :

    def f(a):
        pass
    
    f()  # error, argument is required
    f(1)  # allowed, positional argument
    f(a=1)  # allowed, keyword argument
    
    # In fact that function is the same as this one.
    
    def f(/, a, *):
        pass
  • Paramètre positionnel ou mot-clé facultatif :

    def f(a=1):
        pass
    
    f()  # allowed, argument is optional
    f(1)  # allowed, positional argument
    f(a=1)  # allowed, keyword argument
    
    # In fact that function is the same as this one.
    
    def f(/, a=1, *):
        pass

Conclusion. - Un paramètre peut être obligatoire ou facultatif, mais pas les deux en même temps . Il peut également être positionnel, mot-clé ou les deux en même temps .

22voto

chroipahtz Points 574

Un argument de type mot-clé est simplement un argument de position avec une valeur par défaut. Vous devez spécifier tous les arguments qui n'ont pas de valeur par défaut. En d'autres termes, les arguments de type mot-clé ne sont que "facultatifs", car ils prendront leur valeur par défaut s'ils ne sont pas spécifiquement fournis.

10voto

Rafael Points 2799

Tout d'abord, un paramètre est une entité nommée en la définition de la fonction/méthode qui spécifie un argument. Un argument argument est une valeur transmise à une fonction.

Par exemple,

def rectangle_area(height, width):
    pass

rectangle_area(argument_1, argument_2)

height, width sont les paramètres de la fonction, et argument_1, argument_2 sont les arguments transmis à la fonction. Lorsque l'on parle d'argument positionnel, il s'agit de arguments Cela n'a rien à voir avec la définition de la fonction. width y height sont (par défaut en Python) des paramètres positionnels o les paramètres de mot-clé (appelés paramètres de position ou de mot-clé). Il est donc possible de passer des arguments soit par position, soit par mot-clé.

La façon dont vous appelez/passez la valeur à la fonction détermine si elles sont positionnelles. arguments ou mot-clé arguments .

Pour la fonction rectangle_area nous pourrions l'appeler de la même manière :

rectangle_area(1, 2) # positional arguments
rectangle_area(width=2, height=1) # keyword arguments
  • Dans le premier appel, nous transmettons les valeurs en position : 1 est transmis à la hauteur et 2 à la largeur. En d'autres termes, Python déduit que lorsque vous dites 1, 2 signifie que la hauteur est égale à 1 et la largeur à 2 en fonction de la position qui leur est transmise (c'est-à-dire que dans la définition de la fonction, le premier paramètre est l'élément height et le second est le width ).
  • Dans le deuxième appel, nous transmettons les valeurs par mots-clés . Nous indiquons à Python le paramètre auquel nous passons l'argument. Dans le deuxième exemple, nous inversons l'ordre des arguments, mais nous indiquons à Python que la hauteur est toujours 1 et la largeur 2. Les deux appels ont exactement le même résultat.

uniquement par position et uniquement par mot-clé

Ce que peu de gens savent, c'est qu'il est possible de spécifier un paramètre uniquement positionnel en utilisant la fonction / dans la liste des paramètres (exemple de aquí ).

def func(positional_only1, positional_only2, /, positional_or_keyword): ...

De même, il est possible d'avoir des paramètres uniquement basés sur des mots-clés en utilisant la fonction * caractère.

def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...

Enfin, nous avons également var-positional et var-keyword (respectivement *args et **kwargs). Cela signifie que vous pouvez avoir une séquence arbitraire d'arguments positionnels ou de mots-clés passés à la fonction.

1voto

David Robinson Points 33371

Les arguments positionnels peuvent être appelés soit en utilisant les valeurs dans l'ordre, soit en nommant chacune d'entre elles. Par exemple, les trois arguments suivants fonctionneraient de la même manière :

def rectangleArea(width, height):
    return width * height

print(rectangleArea(1, 2))
print(rectangleArea(width=1, height=2))
print(rectangleArea(height=2, width=1))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X