假设my_function()位于my_apps.views中,我想动态导入my_function而不使用execeval之类的东西。

无论如何,有没有要做到这一点。我正在寻找类似的东西:

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/

10-11 06:22