def f(a, b, c=True):
print(a, b, c)
f('foo') #=> TypeError: f() missing 1 required positional argument: 'b'
f('bar', 16) #=> `bar 16 True' *side effects*
import inspect
# new in version 3.3
inspect.signature(f).bind('foo') #=> TypeError: 'b' parameter lacking default value
inspect.signature(f).bind('bar', 16) #=> <BoundArguments object> *pure*
# new in version 2.7, 3.2
inspect.getcallargs(f, 'foo') #=> TypeError: f() missing 1 required positional argument: 'b'
inspect.getcallargs(f, 'bar', 16) #=> {'b': 16, 'c': True, 'a': 'bar'} *pure*