def make_signature(func):
spec = inspect.getfullargspec(func)<EOL>if spec.defaults is None:<EOL><INDENT>n_wo_defaults = len(spec.args)<EOL>defaults = ('<STR_LIT>',) * n_wo_defaults<EOL><DEDENT>else:<EOL><INDENT>n_wo_defaults = len(spec.args) - len(spec.defaults)<EOL>defaults = ('<STR_LIT>',) * n_wo_defaults + tuple(spec.defaults)<EOL><DEDENT>args = []<EOL>for var, default in zip(spec.args, defaults):<EOL><INDENT>args.append(var if default == '<STR_LIT>' else var + '<STR_LIT:=>' + repr(default))<EOL><DEDENT>if spec.varargs:<EOL><INDENT>args.append('<STR_LIT:*>' + spec.varargs)<EOL><DEDENT>if spec.varkw:<EOL><INDENT>args.append('<STR_LIT>' + spec.varkw)<EOL><DEDENT>return args, spec.args<EOL>
Returns a tuple containing the paramenter list with defaults
and parameter list.

Examples
--------
>>> def f(a, b, c=2):
>>>     return a * b * c
>>> print(make_signature(f))
(['a', 'b', 'c=2'], ['a', 'b', 'c'])