有时候,一些特殊情况,需要用到用字符串的方法名去调用方法。现在做个笔记避免以后一直搜。
如何使用字符串调用函数/方法?
有多种技巧可供选择。
最好的做法是使用一个将字符串映射到函数的字典。 这一技巧的主要优势在于字符串不必与函数名称一致。 这也是用于模拟其他语言中 case 结构的主要技巧:
def a():
pass
def b():
pass
dispatch = {'go': a, 'stop': b} # Note lack of parens for funcs
dispatch[get_input()]() # Note trailing parens to call function
使用内置函数 getattr()
import foo
getattr(foo, 'bar')()
请注意 getattr() 可用于任何对象,包括类、类实例、模块等等。
在标准库中多次使用了这个技巧,例如:
class Foo:
def do_foo(self):
...
def do_bar(self):
...
f = getattr(foo_instance, 'do_' + opname)
f()
使用 locals() 或 eval() 来解析出函数名:
def myFunc():
print("hello")
fname = "myFunc"
f = locals()[fname]
f()
f = eval(fname)
f()
注意:使用 eval() 速度慢而且危险。 如果你不能绝对掌控字符串的内容,别人将能传入可被解析为任意函数直接执行的字符串。
更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址:https://www.linuxidc.com/Linux/2020-01/162141.htm