这是:
import foo as bar
做同样的事情吗?
bar = __import__('foo')
有没有理由使用后者?
我正在阅读别人的代码,我找到了后者并且不确定为什么他们没有使用先前的语法
答案 0 :(得分:6)
直接使用
__import__()
的情况很少见,除非您要导入名称仅在运行时已知的模块。
答案 1 :(得分:5)
这两个陈述做同样的事情。使用后一种语法的唯一原因是事先不知道模块名称。
答案 2 :(得分:2)
Fredrik Lundh来自Importing Python Modules:
Python提供至少三个 导入模块的不同方式。您 可以使用
import
语句from
声明或内置声明__import__
功能。 (还有更多 设法做到这一点,但是 这超出了这个范围 小记。)
...
X =
__import__
('X')就像import X
,区别于此 你是1)传递模块名称为 字符串,和2)明确 将它分配给你的变量 当前的命名空间。
答案 3 :(得分:1)
正如其他人所说,这两种形式在语义上是相同的。直到运行时才知道模块名称时使用更晚的(__import__('foo')
)。最常见的示例是在配置文件或插件加载系统中命名的模块。 Django的配置文件,例如在python配置文件中将插件模块定义为字符串(例如some_plugin = 'foo.plugin'
),Django使用__import__
加载这些模块。