python根据传参动态调用方法
#coding=utf-8 from functools import wraps import importlib import inspect import sys import os packs = {} def cmd_register(cmd_id = 0): def mydecorator(func): ''' print(cmd_id) print(func) ''' #print(dir(func)) packs[cmd_id] = func.__name__ def mywrapped(*args, **kwargs): print("args:", args) print("kwargs:", kwargs) print() result = func(*args, **kwargs) return result return mywrapped return mydecorator @cmd_register(cmd_id=1) def test_func1(): print(1111) @cmd_register(cmd_id=2) def test_func2(): print(2222) if __name__ == '__main__': ''' test_func1() print() test_func2() print() ''' print("packs: ", packs) print() cmd_id = 2 func_name = packs[cmd_id] print("func_name: %s" % func_name) module_name = __name__ ''' module_name = sys.modules[__name__].__name__ # 输出当前模块的名称 module_name = os.path.splitext(os.path.basename(__file__))[0] module_obj = inspect.getmodule(inspect.currentframe()) module_name = module_obj.__name__ # 输出当前模块的名称 ''' print("module_name: %s" % module_name) print() ''' print(type(globals())) print(globals()) print(hasattr(globals(), func_name)) ''' ''' module_obj = importlib.import_module(module_name) func_obj = getattr(module_obj, func_name) func_obj = locals()[func_name] func_obj = eval(func_name) ''' func_obj = globals()[func_name] func_obj()
输出:
packs: {1: 'test_func1', 2: 'test_func2'}
func_name: test_func2
module_name: __main__
args: ()
kwargs: {}
2222
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18780622

浙公网安备 33010602011771号