前言:
目前小伙伴们对“python函数中调用函数”大约比较关切,同学们都需要了解一些“python函数中调用函数”的相关内容。那么小编也在网上汇集了一些关于“python函数中调用函数””的相关资讯,希望咱们能喜欢,同学们一起来学习一下吧!已有字符串形式的函数名称,那么如何调用这个函数呢?
通过调用内置函数locals()和globals()返回的字典对象,就可以可以获得名称与对象的映射关系。其中,locals()仅在全局范围内调用时可以获得函数对象。 我们来看以下的例子。
#函数cmd_help,返回提示字符串def cmd_help(): return "This is demo funtion."# 函数cmd_sum, 返回所有整数的和。def cmd_sum(*nargs): sum = 0 for num in nargs: sum+=int(num) return sum# 函数名前缀cmd_prefix = "cmd_"# 将函数名与函数对象对应,并调用函数。这里省略了异常处理。def dispatch(cmd,*nargs): return globals()[prefix+cmd](*nargs)#调用dispatch("help"), 输出结果:help: This is demo funtion.print("help:", dispatch("help"))#调用dispatch("sum",1,2,3),输出结果:sum(1,2,3)= 6print("sum(1,2,3)=", dispatch("sum",1,2,3))
需要注意的是,使用上述方法通过字符串调用函数时,为了系统的安全,防止执行任意函数,需要对函数名做一些处理,也就是使用统一的前缀为这些函数命名。例如在上述例子中,使用前缀cmd_+函数名的形式定义函数(cmd_help,cmd_sum)。
在传入函数名字符串时,只传入函数名的后半部分(如"help","sum"),由程序添加前缀后组成完整的函数名,再调用该函数。
对于类的成员函数,则可以使用getattr()获得类成员函数。
class DemoClass: prefix = "cmd_" def cmd_help(self): return "This is demo funtion." def cmd_sum(self,*nargs): sum = 0 for num in nargs: sum+=int(num) return sum# 将函数名与类函数对应,并调用函数。省略了异常处理。def dispatch(obj,cmd,*nargs): return getattr(obj,obj.prefix+cmd)(*nargs)demo_obj = DemoClass()#调用dispatch(demo_obj,"help"), 输出结果:help: This is demo funtion.print("help:", dispatch(demo_obj,"help"))#调用dispatch(demo_obj,"sum",1,2,3),输出结果:sum(1,2,3)= 6print("sum(1,2,3)=", dispatch(demo_obj,"sum",1,2,3))
上述代码通过字符串调用了类成员函数,与前一段代码执行的结果相同。
此外,还可以使用字典将字符串与函数对应起来调用,缺点就是每增加一个函数需要相应在字典对象中添加相应的键值,增加代码维护工作量。
以上代码在Python 3.6以上运行通过。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #python函数中调用函数