9

次のような関数があるとします。

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

introspection を使用してmyFunction()を使用して取る引数の名前を見つけることができmyFunction.func_code.co_varnamesますが、 のデフォルト値arg1('a default value'上記の例にあります) を見つけるにはどうすればよいでしょうか?

4

4 に答える 4

10

次のような関数を定義するとf:

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

Python 2 では、以下を使用できます。

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

一方、Python 3 では次のようになります。

>>> f.__defaults__
(1, True, 'foo')
>>> help(f)
Help on function f in module __main__:
f(a=1, b=True, c='foo')
于 2011-02-01T09:14:10.053 に答える
10

関数の属性を探す代わりに、少し使いやすいインターフェースの inspect モジュールを使用できます。

Python 3.x インタープリターの場合:

import inspect
spec = inspect.getfullargspec(myFunction)

次に、 spec はやFullArgSpecなどの属性を持つオブジェクトです。argsdefaults

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

これらの属性の一部は Python 2 では使用できないため、古いバージョンを使用する必要がある場合はinspect.getargspec(myFunction)、Python 3 の機能がなくても同様の値が得られます (Python 3getargspecでも動作しますが、Python 3.0 以降は非推奨になっているため、使用しないでください)。 :

import inspect
spec = inspect.getargspec(myFunction)

次に、 spec はやArgSpecなどの属性を持つオブジェクトです。argsdefaults

ArgSpec(args=['arg1'], varargs=None, keywords=None, defaults=('a default value',))
于 2011-02-01T09:36:01.177 に答える
0

私の悪い。もちろん、ありmyFunction.func_defaultsます。

于 2011-02-01T07:33:47.207 に答える