In [1]:
from inspect import signature

In [2]:
def f(a, b, c=1):
    pass

In [3]:
sig = signature(f)

In [12]:
params = sig.parameters
params


Out[12]:
mappingproxy({'a': <Parameter "a">,
              'b': <Parameter "b">,
              'c': <Parameter "c=1">})

In [13]:
a = sig.parameters['a']

In [14]:
a.name


Out[14]:
'a'

In [15]:
a.kind


Out[15]:
<_ParameterKind.POSITIONAL_OR_KEYWORD: 1>

In [16]:
a.default


Out[16]:
inspect._empty

In [17]:
c = sig.parameters.get('c')

In [18]:
c.default


Out[18]:
1

In [37]:
sig.bind?

In [31]:
# Bind to type
bind = sig.bind(str, int, int)

In [32]:
bind.arguments


Out[32]:
OrderedDict([('a', str), ('b', int), ('c', int)])

In [33]:
bind.arguments.get('a')


Out[33]:
str

In [34]:
bind.arguments['a']


Out[34]:
str

In [27]:
sig.bind(str)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-4a46b925cd4f> in <module>()
----> 1 sig.bind(str)

/home/wukai/.pyenv/versions/miniconda3-latest/envs/cv3/lib/python3.5/inspect.py in bind(*args, **kwargs)
   2918         if the passed arguments can not be bound.
   2919         """
-> 2920         return args[0]._bind(args[1:], kwargs)
   2921 
   2922     def bind_partial(*args, **kwargs):

/home/wukai/.pyenv/versions/miniconda3-latest/envs/cv3/lib/python3.5/inspect.py in _bind(self, args, kwargs, partial)
   2833                             msg = 'missing a required argument: {arg!r}'
   2834                             msg = msg.format(arg=param.name)
-> 2835                             raise TypeError(msg) from None
   2836             else:
   2837                 # We have a positional argument to process

TypeError: missing a required argument: 'b'

In [30]:
print(sig.bind_partial.__doc__)


Get a BoundArguments object, that partially maps the
        passed `args` and `kwargs` to the function's signature.
        Raises `TypeError` if the passed arguments can not be bound.
        

In [ ]: