116 votes

Obtenir une liste/tuple/dict des arguments passés à une fonction ?

Etant donné la fonction suivante :

def foo(a, b, c):
    pass

Comment obtenir une liste/tuple/dict/etc des arguments passés, sans avoir à construire la structure moi-même ?

Plus précisément, je cherche la version Python de la fonction JavaScript arguments ou le mot-clé de PHP func_get_args() méthode.

Ce que je pas recherche une solution utilisant les *args o **kwargs Je dois spécifier les noms des arguments dans la définition de la fonction (pour m'assurer qu'ils sont bien transmis), mais à l'intérieur de la fonction, je veux travailler avec eux dans une structure de type liste ou dictée.

1voto

Marcelo Cantos Points 91211

Une solution, utilisant des décorateurs, est la suivante aquí .

0voto

AbhishekLohade Points 31
class my_class():
        compulsory_default_kwargs = {'p':20,'q':30,'r':40}
        formal_args_names = ['var1','var2']
        def __init__(self,*args,**kwargs):
            for key , value in locals().items():
                if((key == 'args')):
                    if(len(args) == len(my_class.formal_args_names)):
                        for key_name , arg_value in zip(my_class.formal_args_names,args):
                            setattr(self,key_name,arg_value)
                    else:
                        raise Exception ('Error - Number of formal arguments passed mismatched required {} whereas passed {}'.format(len(my_class.formal_args_names),len(args)))

                elif((key == 'kwargs') & (len(kwargs)!=0)):
                    for kw_key , kw_value in kwargs.items():
                        if kw_key in my_class.compulsory_default_kwargs.keys():
                            setattr(self,kw_key,kw_value)
                        else:
                            raise Exception ('Invalid key-word argument passed {}'.format(kw_key))
                #elif((key!='self') & (key!='kwargs') ):
                   # setattr(self,key,value)
            for key , value in my_class.compulsory_default_kwargs.items():
                if key not in kwargs.keys():
                    setattr(self,key,value)

    this_value = 'Foo'    
    my_cl = my_class(3,this_value,p='B',r=10)
    my_cl.__dict__

-3voto

Oddthinking Points 8946

Vous avez spécifié les paramètres dans l'en-tête ?

Pourquoi ne pas utiliser ces mêmes informations dans le corps ?

def foo(a, b, c):
   params = [a, b, c]

Qu'est-ce que j'ai manqué ?

-3voto

Michael Aaron Safyan Points 45071

Vous pouvez en créer une liste en utilisant :

args = \[a, b, c\]

Vous pouvez facilement créer un tuple à partir de ces données en utilisant :

args = (a, b, c)

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