首页 » 编程开发 » Python » 正文

Python通过eval调用函数及其他使用函数名字符串调用函数的方法

Python通过eval调用函数的方法

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

发表评论