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')()