开发者

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

开发者 https://www.devze.com 2023-01-12 21:31 出处:网络
Using python 2.4, I\'m atte开发者_StackOverflowmpting to identify, at runtime, which of an arbitrary function\'s arguments have default values. Unfortunately, although I can find what the default valu

Using python 2.4, I'm atte开发者_StackOverflowmpting 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


From the documentation, it discusses the value for defaults:

if this tuple has n elements, they correspond to the last n elements listed in args.

In your case defaults contains one value and corresponds to the last element listed in args, which is c.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号