sch*_*eck 69 python function-pointers
我有一个函数名存储在一个变量中,如下所示:
myvar = 'mypackage.mymodule.myfunction'
Run Code Online (Sandbox Code Playgroud)
而我现在想要像这样打电话给我
myvar(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最简单方法是什么?
Ign*_*ams 101
funcdict = {
'mypackage.mymodule.myfunction': mypackage.mymodule.myfunction,
....
}
funcdict[myvar](parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
小智 37
能够只存储函数本身要好得多,因为它们是python中的第一类对象.
import mypackage
myfunc = mypackage.mymodule.myfunction
myfunc(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
但是,如果您必须动态导入包,那么您可以通过以下方式实现此目的:
mypackage = __import__('mypackage')
mymodule = getattr(mypackage, 'mymodule')
myfunction = getattr(mymodule, 'myfunction')
myfunction(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
但请记住,所有这些工作都适用于您目前所处的任何范围.如果您不以某种方式坚持它们,如果您离开当地范围,您就不能指望它们留在那里.
Pra*_*are 13
def f(a,b):
return a+b
xx = 'f'
print eval('%s(%s,%s)'%(xx,2,3))
Run Code Online (Sandbox Code Playgroud)
OUTPUT
5
Run Code Online (Sandbox Code Playgroud)
最简单的
eval(myvar)(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
你没有函数"指针".你有一个功能"名称".
虽然这很好用,但是你会有很多人告诉你它"不安全"或"安全风险".