La syntaxe est la suivante *
y **
. Les noms *args
y **kwargs
ne le sont que par convention, mais il n'y a aucune obligation de les utiliser.
Vous utiliseriez *args
lorsque vous n'êtes pas sûr du nombre d'arguments qui peuvent être passés à votre fonction, c'est-à-dire qu'elle vous permet de passer un nombre arbitraire d'arguments à votre fonction. Par exemple :
>>> def print_everything(*args):
for count, thing in enumerate(args):
... print( '{0}. {1}'.format(count, thing))
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage
De même, **kwargs
vous permet de gérer des arguments nommés que vous n'avez pas définis à l'avance :
>>> def table_things(**kwargs):
... for name, value in kwargs.items():
... print( '{0} = {1}'.format(name, value))
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit
Vous pouvez également les utiliser avec les arguments nommés. Les arguments explicites obtiennent des valeurs en premier et ensuite tout le reste est passé à *args
y **kwargs
. Les arguments nommés viennent en premier dans la liste. Par exemple :
def table_things(titlestring, **kwargs)
Vous pouvez également utiliser les deux dans la même définition de fonction mais *args
doit se produire avant **kwargs
.
Vous pouvez également utiliser le *
y **
lors de l'appel d'une fonction. Par exemple :
>>> def print_three_things(a, b, c):
... print( 'a = {0}, b = {1}, c = {2}'.format(a,b,c))
...
>>> mylist = ['aardvark', 'baboon', 'cat']
>>> print_three_things(*mylist)
a = aardvark, b = baboon, c = cat
Comme vous pouvez le voir dans ce cas, il prend la liste (ou le tuple) d'éléments et la décompose. Ainsi, il les fait correspondre aux arguments de la fonction. Bien sûr, vous pourriez avoir un *
à la fois dans la définition de la fonction et dans l'appel de la fonction.
13 votes
Une fois que vous les maîtriserez, vous ne voudrez plus jamais vous en passer (surtout si vous avez déjà eu à faire face à l'erreur de PHP).
func_*_args()
).5 votes
Les documents sont disponibles à l'adresse suivante docs.python.org/faq/programming.html#id13 au fait.
3 votes
En fait, ces deux formats d'arguments peuvent être ajoutés à n'importe quelle déclaration de fonction, à condition qu'ils soient les deux derniers. Notez l'ordre :
explicit args, then *args, then **kwargs
. par exempledef foo (arg1, arg2, *args, **kwargs): ...
0 votes
(Si vous êtes en Javascript, il y a
arguments
qui est similaire)