オブジェクトの情報を探る(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
ページのトップへ戻る