问题提出
如何将提取得到的字符串(该字符串且等于函数名),此时该函数名是字符串格式,如何用作函数实现其功能?
代码五种设计思路
T1方法:eval()
通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。
print('eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。')
for func in func_list:
eval(func)()
T2方法: locals() 和 globals()
是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。
print('locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。')
for func in func_list:
locals()[func]()
for func in func_list:
globals()[func]()
T3方法:
print('methodcaller方法')
class Foo:
def do_foo(self):
print('执行do_foo()函数')
def do_bar(self):
print('执行do_bar()函数')
f = Foo()
from operator import methodcaller
methodcaller('do_foo')(f)
T4、方法
print('globals().get')
globals().get('foo')
T5方法
getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。
print('getattr()方法')
import foo
getattr(foo, 'bar')()
综合
def foo():
print("foo")
def bar():
print("bar")
func_list = ["foo","bar"]
#T1方法:eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。
print('eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。')
for func in func_list:
eval(func)()
#T2方法: locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。
print('locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。')
for func in func_list:
locals()[func]()
for func in func_list:
globals()[func]()
#T3方法:
print('methodcaller方法')
class Foo:
def do_foo(self):
print('执行do_foo()函数')
def do_bar(self):
print('执行do_bar()函数')
f = Foo()
from operator import methodcaller
methodcaller('do_foo')(f)
#T4、方法:
print('globals().get')
globals().get('foo')
#T5方法: getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。
print('getattr()方法')
import foo
getattr(foo, 'bar')()