メモ その4 関数のパラメータ名
こじんメモ
いろんな言語でも関数のパラメータ名を取得するのって大変
(rubyとperlとかは知らないけど)
限られたパターンでしかないが・・・。
もっと簡単な方法があると思うが
- vars(locals)でスコープ内で宣言されている変数名を取得
- 宣言されている引き数の数を取得してその数だけ取り出す
これで関数のパラメータ名を取得。
default値はfunc_defaultsより取得する事も可能。
sample.py
def test(a, b): c = a + c d = c + e return str(d) print test.func_code.co_varnames[:test.func_code.co_argcount]
指定した文字列のモジュールの関数のパラメータ名を調べるには
def _get_mod_func(callback): try: index = callback.rindex('.') except ValueError: return callback, '' return callback[:index], callback[index+1:] def get_callback(callable): module_name, function_name = _get_mod_func(callable) try: return getattr(__import__(module_name, {}, {}, ['']), function_name) except ImportError, e: raise ViewDoesNotExist, "Could not import %s. Error was :%s" % (module_name, str(e)) except AttributeError, e: raise ViewDoesNotExist, "Tried %s in module %s. Error was :%s" %(callable, module_name, str(e)) def get_parameter(call) func = get_callback(call) argcnt = func.func_code.co_argcount arg_list = func.func_code.co_varnames return arg_list[:argcnt]
これで大分使いまわせるように。
何に使うか不明ですよ。
うくく。