主要是利用globals()
下面先简单介绍globals() 和 locals(),返回dictionary,都是记录变量的轨迹。
两者类似,差异在作用域不同
locals 对应局部名字空间――特指当前函数或类的方法。
globals 对应全局名字空间――特指当前的模块。
回到原题,globals可以将全局空间的所有函数和变量的名字都作为key(字符串),值作为value记录下来,而通过这种方法既可以实现函数封装
不废话,上例子
#添加要执行的动作
def AddAction(name,*params):
global g_funcAndParamMap
print name
g_funcAndParamMap[name] = [params]
#执行动作
def CallFunc(mapname,name):
try:
if name in globals():
globals()[name](*mapname[name][0])
else:
ExcMacroAction(mapname[name][0])
except:
common.Log(name + ":" + str(mapname[name][0]))
common.Log("exec error:"+ traceback.format_exc() + os.linesep)
mapname={“函数名称”,args1,args2,...}
name 特定的函数名称
首先通过AddAction将函数名(字符串)和参数(正常格式)添加到g_funcAndParamMap的map中;
然后 取特定函数名称调用CallFunc即可~