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

 

posted @ 2025-03-19 11:02  河北大学-徐小波  阅读(289)  评论(0)    收藏  举报