2010-05-18 7 views

Répondre

2

Généralement, il est utilisé soit pour transmettre une liste d'arguments à une fonction qui prendrait normalement un nombre fixe d'arguments, soit dans des définitions de fonctions pour permettre le passage d'un nombre variable d'arguments dans le style des arguments normaux. Par exemple, la fonction print() utilise varargs pour que vous puissiez faire des choses comme print(a,b,c). Un exemple d'une question SO récente: vous pouvez l'utiliser pour passer une liste de range() listes de résultats à itertools.product() sans avoir à connaître la longueur de la liste de listes.

Bien sûr, vous pouvez écrire toutes les fonctions bibliothèque pour ressembler à ceci:

def libfunc1(arglist): 
    arg1 = arglist[1] 
    arg2 = arglist[2] 
    ... 

... mais défaites au point d'avoir nommé des variables d'argument de position, il est fondamentalement exactement ce que *args fait pour vous, et résultats accolades/parens redondants, puisque vous auriez à appeler une fonction comme ceci:

libfunc1([arg1val,arg2val,...]) 

... qui ressemble beaucoup à ...

libfunc1(arg1val,arg2val,...) 

... sauf avec des caractères inutiles, par opposition à *args.

+0

Merci, cependant je demandais quels sont les avantages de ce passage sur une liste en tant que paramètre. évidemment les concepteurs de python ont préféré cela pour une raison quelconque, car outre l'esthétique, cette méthode est apparemment totalement redondante. –

+0

Ajout d'un exemple. L'un des gros avantages est qu'il vous permet de passer facilement des choses de longueur variable aux fonctions de la bibliothèque standard, sans que les fonctions de la bibliothèque aient à être réécrites. – Amber

+0

merci beaucoup, cela répond à ma question :) –

2

C'est pour flexibilité.

Il vous permet de transmettre les arguments, sans savoir de combien vous avez besoin. Un exemple typique:

def f(some, args, here): # <- this function might accept a varying nb of args 
    ... 

def run_f(args, *f_args): 
    do_something(args) 
    # run f with whatever arguments were given: 
    f(*f_args) 

Assurez-vous de vérifier la version de mot-clé **.

+0

Merci :), qui a répondu à ma question –

Questions connexes