338 votes

Arguments normales Python vs. arguments de mot clé

Est-ce que quelqu'un pourrait expliquer les différences pour moi ? Tous les arguments ne sont pas « arguments de mot-clé » ? Ils ont tous les noms, et peuvent tous être affectés par ce nom plutôt qu’en position. Arguments de mot-clé signifient ceux avec des valeurs par défaut ? (Note : je ne parle pas de la pure python, sans C)

Merci.

EDIT : Je viens de réaliser il y a deux types de chacun :

J’ai me parle de la seconde, mais penser il serait décidé dans la mise en œuvre, pas l’appel de méthode.

406voto

Ian Clelland Points 15066

il y a deux concepts connexes, à la fois appelé "mot-clé arguments".

Dans la partie appelante, qui est ce que les autres commentateurs l'ont mentionné, vous avez la possibilité de spécifier des arguments de la fonction par son nom. Vous devez les mentionner, après tous les arguments sans les noms (des arguments de position), et il doit y avoir des valeurs par défaut pour tous les paramètres qui n'étaient pas mentionnés.

L'autre concept est sur la définition de la fonction de côté: Vous pouvez définir une fonction qui prend en paramètres par son nom-et vous n'avez même pas à préciser ce que sont ces noms sont. Ce sont des pures mot-clé arguments, et ne peut pas être passé en position. La syntaxe est la suivante

def my_function(arg1, arg2, **kwargs)

Le mot-clé arguments que vous passer dans cette fonction sera placé dans un dictionnaire nommé kwargs. Vous pouvez examiner les clés de ce dictionnaire au moment de l'exécution, comme ceci:

def my_function(**kwargs):
    print str(kwargs)

my_function(a=12, b="abc")

{'a': 12, 'b': 'abc'}

222voto

too much php Points 27983

Il y a une dernière fonctionnalité du langage où la distinction est importante. Considérons la fonction suivante:

def foo(*positional, **keywords):
    print "Positional:", positional
    print "Keywords:", keywords

L' *positional argument va stocker tous les arguments de position transmis foo(), avec aucune limite à combien vous pouvez fournir.

>>> foo('one', 'two', 'three')
Positional: ('one', 'two', 'three')
Keywords: {}

L' **keywords argument va stocker le mot-clé arguments:

>>> foo(a='one', b='two', c='three')
Positional: ()
Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}

Et bien sûr, vous pouvez utiliser les deux en même temps:

>>> foo('one','two',c='three',d='four')
Positional: ('one', 'two')
Keywords: {'c': 'three', 'd': 'four'}

Ces fonctions sont rarement utilisés, mais parfois ils sont très utiles, et il est important de savoir quels sont les arguments de position ou de mots clés.

131voto

Eli Grey Points 17553

En utilisant des arguments de mot clé est la même chose en tant qu’arguments normales sauf ordonnance n’est pas grave. Par exemple, les appels de deux fonctions ci-dessous sont les mêmes :

52voto

Unknown Points 22789
<h1>Arguments normales<p>Ils n’ont pas de mots clés saisis. L’ordre est important !</p><pre><code></code></pre><h1>Arguments de mot clé</h1><p>Ils ont des mots-clés dans le front. Ils peuvent être dans n’importe quel ordre !</p><pre><code></code></pre><p>Vous devez également savoir que si vous utilisez des arguments par défaut et la négligence à insérer les mots clés, puis l’ordre comptera alors !</p><pre><code></code></pre></h1>

27voto

S.Lott Points 207588

Il y a deux façons d'attribuer des valeurs d'argument pour les paramètres de la fonction, les deux sont utilisés.

  1. Par Position. Les arguments de position n'ont pas de mots clés et sont affectés en premier.

  2. Par Mot-Clé. Mot-clé arguments des mots clés et sont affectés deuxième, après les arguments de position.

Notez que vous avez la possibilité d'utiliser des arguments de position.

Si vous n'utilisez pas les arguments de position, puis -- oui -- tout ce que vous avez écrit s'avère être un argument mot-clé.

Lorsque vous appelez une fonction vous prenez une décision à utiliser la position ou un mot clé ou d'un mélange. Vous pouvez choisir de le faire tous les mots-clés si vous le souhaitez. Certains d'entre nous ne font pas ce choix et l'utilisation des arguments de position.

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