假设my_function()
位于my_apps.views中,我想动态导入my_function
而不使用exec
或eval
之类的东西。
无论如何,有没有要做到这一点。我正在寻找类似的东西:
my_function = import_func("my_apps.views.my_function")
my_function()
... code is executed
最佳答案
你要
my_function = getattr(__import__('my_apps.views'), 'my_function')
如果您在编译时碰巧知道函数的名称,可以将其缩短为
my_function = __import__('my_apps.views').my_function
这将加载
my_apps.views
,然后将其my_function
属性分配给本地my_function
。如果您确定只需要一种功能,那么这是可以接受的。如果您需要多个属性,则可以执行以下操作:
views = __import__('my_apps.views')
my_function = getattr(views, 'my_function')
my_other_function = getattr(views, 'my_other_function')
my_attribute = getattr(views, 'my_attribute')
因为它更具可读性,并且可以节省一些对
__import__
的调用。同样,如果您知道名称,则可以如上所述缩短代码。您也可以使用imp模块中的工具来执行此操作,但是它更加复杂。
关于python - 如何动态导入python模块功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3606202/