Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能


问题提出

如何将提取得到的字符串(该字符串且等于函数名),此时该函数名是字符串格式,如何用作函数实现其功能?

代码五种设计思路

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

相关推荐