2010-10-12 24 views
7

Possible en double:
How to find out the arity of a method in PythonLongueur des arguments de la fonction Python?

Par exemple, je l'ai déclaré une fonction:

def sum(a,b,c): 
    return a + b + c 

Je veux obtenir la longueur des arguments de la fonction "somme".
quelque chose comme ceci: some_function (sum) à renvoyer 3
Comment cela peut-il être fait en Python?

Mise à jour:
Je pose cette question parce que je veux écrire une fonction qui accepte une autre fonction en tant que paramètre et arguments pour le transmettre.

def funct(anotherFunct, **args): 

et je dois valider:

if(len(args) != anotherFuct.func_code.co_argcount): 
    return "error" 
+0

Vous pouvez voir le code source, n'est-ce pas? C'est évidemment 3. Qu'est-ce que vous devez savoir de plus? –

+1

pourquoi ne pas essayer de passer '* args' et retourner' return len (args) 'ou' return len (filtre (None, args)) '!!! – shahjapan

+0

parce que je veux écrire une fonction qui accepte une autre fonction en tant que paramètre et des arguments pour la passer. def funct (anotherFunct, ** args): et je dois valider: if (len (args)! = anotherFuct.func_code.co_argcount): return "erreur" – Zango

Répondre

5

Si le nom de votre méthode est sum alors sum.func_code.co_argcount vous donnera le nombre d'arguments.

+0

Quels sont les inconvénients de l'utilisation de cette méthode? Étant donné les autres réponses que je suppose en utilisant «inspecter» est le moyen préféré. Pourquoi est-ce? – Annan

2
import inspect 

print len(inspect.getargspec(sum)[0]) 
13

Le module inspect est votre ami; spécifiquement inspect.getargspec qui vous donne des informations sur les arguments d'une fonction:

>>> def sum(a,b,c): 
...  return a + b + c 
... 
>>> import inspect 
>>> argspec = inspect.getargspec(sum) 
>>> print len(argspec.args) 
3 

argspec contient également des détails des arguments optionnels et arguments de mots clés, ce qui dans votre cas, vous n'avez pas, mais il est bon de savoir sur:

>>> print argspec 
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)