Knowing the signature of a function
Xavier Décoret
Xavier.Decoret at imag.fr
Wed Jun 8 08:44:47 EDT 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
Thanks.
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):
pass
def bar(x):
pass
print countargs(foo)
print countargs(bar)
Is there any better way?
More information about the Python-list
mailing list