Using python 2.4, I'm attempting to identify, at runtime, which of an arbitrary function's arguments have default values. Unfortunately, although I can find what the default values are, I can't seem to get a handle on which parameters they correspond to. For example:
def foo(a, b, c=5):
return a + b + c
import inspect
inspect.getargspec(foo) # output is: (['a', 'b', 'c'], None, None, (5,))
The output of getargspec
is clearer in python 2.6, which returns a named tuple:
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=(5,))
Python obviously has enough information to accomplish the task during execution. How can I get at it?
Arguments with default values must follow arguments without default values.
So if there are any defaults, they must correspond to the arguments at the tail end of args
.
In your case, args=['a','b','c']
, and defaults=(5,)
. So the default must correspond to c
.
import inspect
def foo(a, b, c=5):
return a + b + c
def show_defaults(f):
args, varargs, varkw, defaults = inspect.getargspec(f)
if defaults:
for arg, default in zip(args[-len(defaults):], defaults):
print('{a} = {d}'.format(a=arg,d=default))
show_defaults(foo)
# c = 5
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With