2010-10-12 14 views
7

Duplicar posibles:
How to find out the arity of a method in PythonDuración de los argumentos de la función Python?

Por ejemplo, yo he declarado una función:

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

Quiero conseguir la longitud de los argumentos de la función "suma".
somethig como este: some_function (sum) to returned 3
¿Cómo se puede hacer en Python?

Actualización:
me hizo esta pregunta porque quiero escribir una función que acepta otra función como parámetro y argumentos para que se apruebe.

def funct(anotherFunct, **args): 

y necesito para validar:

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

Puede ver el código fuente, ¿o no? Obviamente es 3. ¿Qué más necesitas saber? –

+1

¿Por qué no intentas pasar '* args' y devuelves' return len (args) 'o' return len (filter (None, args)) '!!! – shahjapan

+0

porque quiero escribir una función que acepte otra función como parámetro y argumentos para pasarla. def funct (anotherFunct, ** args): y necesito validar: if (len (args)! = anotherFuct.func_code.co_argcount): return "error" – Zango

Respuesta

5

Si el nombre de su método es sum, entonces sum.func_code.co_argcount le dará la cantidad de argumentos.

+0

¿Qué desventajas hay al usar este método? Dadas las otras respuestas, supongo que usar 'inspeccionar' es la forma preferida. ¿Por qué es esto? – Annan

2
import inspect 

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

El módulo inspect es su amigo; específicamente inspect.getargspec que le da información sobre los argumentos de una función:

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

argspec contiene también datos sobre argumentos opcionales y argumentos de palabras clave, que en su caso no tiene, pero vale la pena conocer:

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