How to find out the default values of a particular function's argument in another function in Python?

自闭症网瘾萝莉.ら 提交于 2019-12-01 15:16:40

问题


Let's suppose we have a function like this:

def myFunction(arg1='a default value'):
  pass

We can use introspection to find out the names of the arguments that myFunction() takes using myFunction.func_code.co_varnames, but how to find out the default value of arg1 (which is 'a default value' in the above example)?


回答1:


As an alternative to rooting around in the attributes of the function you can use the inspect module for a slightly friendlier interface:

For Python 3.x interpreters:

import inspect
spec = inspect.getfullargspec(myFunction)

Then spec is a FullArgSpec object with attributes such as args and defaults:

FullArgSpec(args=['arg1'], varargs=None, varkw=None, defaults=('a default value',), kwonlyargs=[], kwonlydefaults=None, annotations={})

Some of these attributes are not available on Python 2 so if you have to use an old version inspect.getargspec(myFunction) will give you a similar value without the Python 3 features (getargspec also works on Python 3 but has been deprecated since Python 3.0 so don't use it):

import inspect
spec = inspect.getargspec(myFunction)

Then spec is an ArgSpec object with attributes such as args and defaults:

ArgSpec(args=['arg1'], varargs=None, keywords=None, defaults=('a default value',))



回答2:


If you define a function f like this:

>>> def f(a=1, b=True, c="foo"):
...     pass
...

in Python 2, you can use:

>>> f.func_defaults
(1, True, 'foo')
>>> help(f)
Help on function f in module __main__:
f(a=1, b=True, c='foo')

whereas in Python 3, it's:

>>> f.__defaults__
(1, True, 'foo')
>>> help(f)
Help on function f in module __main__:
f(a=1, b=True, c='foo')



回答3:


My bad. Of course, there's myFunction.func_defaults.



来源:https://stackoverflow.com/questions/4859993/how-to-find-out-the-default-values-of-a-particular-functions-argument-in-anothe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!