How can I read a function's signature including default argument values?
Given a function object, how can I get its signature? For example, for:
def myMethod(firt, second, third='something'):
pass
I would like to get "myMethod(firt, second, third='something')"
.
import inspect
def foo(a, b, x='blah'):
pass
print(inspect.signature(foo))
# ArgSpec(args=['a', 'b', 'x'], varargs=None, keywords=None, defaults=('blah',))
Python 3.5+ recommends inspect.signature()
.
Arguably the easiest way to find the signature for a function would be help(function)
:
>>> def function(arg1, arg2="foo", *args, **kwargs): pass
>>> help(function)
Help on function function in module __main__:
function(arg1, arg2='foo', *args, **kwargs)
Also, in Python 3 a method was added to the inspect
module called signature
, which is designed to represent the signature of a callable object and its return annotation:
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
... pass
>>> sig = signature(foo)
>>> str(sig)
'(a, *, b:int, **kwargs)'
>>> str(sig.parameters['b'])
'b:int'
>>> sig.parameters['b'].annotation
<class 'int'>