Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to I determine the default value for a given function parameter at runtime?

Tags:

python

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?

like image 925
vezult Avatar asked Jan 22 '23 13:01

vezult


1 Answers

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
like image 167
unutbu Avatar answered Jan 29 '23 06:01

unutbu