在Python中使用字符串导入
简短版本:
假设我有一个字符串 str
,还有一个文件 functions.py
,我想从这个文件中导入一个方法,而这个方法的名字就存储在 str
里。
我该怎么做呢?我想要的效果是:
from functions.py import str
但是我希望能把 str
的内容解析出来,而不是导入名为 'str' 的方法(这个方法并不存在)。
经过一番搜索,我好像找到了一个接近的解决方案:
func_name = str
_tmp = __import__('functions.py', globals(), locals(), ['func_name'], -1)
func = ???? <what to put here?>
提前谢谢大家。
补充说明:信息有点多。
3 个回答
0
如果你的目标是通过只导入需要的函数来节省内存,那就别费心了;即使你使用了 from ... import ...
这种写法,Python 还是会把整个模块都导入进来,只不过它只会把你明确请求的那些成员添加到当前的字典中(其他的成员仍然在内存里,只是你不能直接访问它们)。
考虑到这一点,我会这样做:
import functions
the_name = self.name.lower() + str(i)
the_func = getattr(functions, the_name)
1
getattr
方法可以让你获取一个对象的属性。因为全局函数其实是它所在模块的属性,所以你可以这样使用:
import functions
funcName = 'doSomething'
f = getattr(functions, funcName)
f(123)
不需要使用 __import__
,因为通常只有在你事先不知道模块名称的时候才需要用到它。
5
假设你把模块导入到_tmp
的代码是可以正常运行的,那么最后一步就很简单了:
func = getattr(_tmp, func_name)