Knowing the signature of a function

Xavier Décoret Xavier.Decoret at
Wed Jun 8 14:44:47 CEST 2005

Kent Johnson a écrit :
> Xavier Décoret wrote:
>> Hello,
>> I have the following code:
>> def foo(x,y):
>>     pass
>> How can I query the function object foo to know the number of 
>> parameters it expects.  I can find it is a function using callable(f), 
>> I can find some information (listed by dir(foo)) such as the name of 
>> the function,etc.. but nowhere I can find the number of arguments.
>> I would like to know wether the function expects one or zero arguments.
> foo.func_code.co_argcount gives the count of named args. 
> len(foo.func_code.co_varnames) gives the total number of arguments 
> including *args and **kwds args. inspect.getargspec() might also be 
> helpful.
> Kent


Now I have the following issue: what if foo is not a function but a 
callable? inspect.getargspec raises an exception.

I have to do something like:

import inspect

def countargs(f):
     if callable(f):
         if inspect.isfunction(f): return len(inspect.getargspec(f)[0])
         return len(inspect.getargspec(f.__call__)[0])-1
     raise ValueError

class foo:
     def __call__(self,a,b):

def bar(x):

print countargs(foo)
print countargs(bar)

Is there any better way?

More information about the Python-list mailing list