Python中exec,eval函数都可以通过函数名直接调用函数,exec,eval的参数都为一个字符串,不同的是,exec将字符串当成python表达式来执行不返回结果,而eval将接收的字符串当作表达式来执行,并返回结果。具体的例子请看下面:
example1:
def a(): print '1' func_a = 'a' eval(func_a)()
结果:1
———————————————————————————–
example2:
def a(): print '1' def b(): print '2' def c(): print '3' func_list = ['a','c'] for func in func_list: eval(func)()
结果:1
3
是不是很方便,当然也有它的缺点,那就是安全性差。
不使用eval使用函数名字符串调用函数其他方法
example1:
# Call it func()For example:class A: def __init__(self): pass def sampleFunc(self, arg): print('you called sampleFunc({})'.format(arg)) m = globals()['A']() func = getattr(m, 'sampleFunc') func('sample arg') ##调用
example2:
假设模块foo有函数bar: import foo methodToCall = getattr(foo, 'bar') result = methodToCall() 或者一行搞定 result = getattr(foo, 'bar')()