オブジェクトの情報を探る(5) - 関数オブジェクト
【 目次 】
関数オブジェクトの属性
関数オブジェクトの属性については、公式ドキュメントの表よりfunction型の部分のみを抜き出して引用すると
属性 | 説明 |
---|---|
__doc__ | ドキュメント文字列 |
__name__ | 関数が定義された時の名前 |
func_code | 関数をコンパイルしたバイトコード (bytecode) を格納するコードオブジェクト |
func_defaults | 引数のデフォルト値のタプル |
func_doc | (__doc__と同じ) |
func_globals | 関数を定義した時のグローバル名前空間 |
func_name | (__name__と同じ) |
関数オブジェクトについては「関数オブジェクトと属性 - 愚鈍人
」などで既に述べた。
ここではinspectモジュールで定義されている関数オブジェクトに関する関数に的を絞って述べる事にする。
getargspec関数 - 関数の引数の情報を取得
getargspec関数は関数オブジェクトの引数名とデフォルト値をArgSpec型のオブジェクト(ArgSpec(args, varargs, keywords, defaults)
形式の名前付きタプル)として返す。
公式ドキュメントによると。
args は引数名のリストです (ネストしたリストが格納される場合があります)。 varargs と keywords は * 引数と ** 引数の名前で、引数がなければ None となります。 defaults は引数のデフォルト値のタプルか、デフォルト値がない場合は None です。このタプルに n 個の要素があれば、各要素は args の後ろから n 個分の引数のデフォルト値となります。
getargspec関数の例を以下に示す。
def func(arg,default_arg="default_value", *list_args,**dict_args): pass import inspect arg_spec=inspect.getargspec(func) print arg_spec.args print arg_spec.varargs print arg_spec.keywords print arg_spec.defaults
実行結果
['arg', 'default_arg'] list_args dict_args ('default_value',)
getcallargs関数
getcallargs関数は、関数に引数値が与えられた場合に引数名と引数値の対応がどのようになるかを調べる事ができる。
getcallargsは引数名と引数値の対応を辞書に詰めて返すようで、前述の関数funcに引数を与えてやると
dict_value= inspect.getcallargs(func, "A","B","C","D",e="E",f="F") for arg_name, arg_value in dict_value.items(): print u"引数名={0} , 引数値={1}".format(arg_name,arg_value)
実行結果
引数名=default_arg , 引数値=B 引数名=dict_args , 引数値={'e': 'E', 'f': 'F'} 引数名=list_args , 引数値=('C', 'D') 引数名=arg , 引数値=A