gpt4 book ai didi

python - 导入 vs __import__() vs importlib.import_module()?

转载 作者:IT老高 更新时间:2023-10-28 21:57:58 25 4
gpt4 key购买 nike

我注意到 Flask 正在使用 Werkzeug 来 __import__ 一个模块,我有点困惑。我去查看了上面的文档,发现它似乎以某种方式让您在查找模块的位置方面提供了更多控制权,但我不确定确切如何,而且我的想法为零它与 importlib.import_module 有何不同。

Werkzeug 示例中的奇怪之处在于它只是说 __import__(import_name),所以我看不出这与仅使用 import 语句有什么不同,因为它忽略了可选的额外参数。

谁能解释一下?我查看了其他人之前就 SO 提出过类似问题,但他们的问题措辞不是很清楚,而且答案根本没有解决这个问题。

最佳答案

__import__是一个用于导入模块的低级钩子(Hook)函数;它可用于通过将模块名称作为变量导入来动态导入模块,这是 import 语句不允许您这样做的。

importlib.import_module()是该钩子(Hook)* 的包装器,用于为该功能生成一个不错的 API;它是 Python 2 的最新补充,在 Python 3 中更加充实。使用 __import__ 的代码库通常这样做是因为它们希望与较旧的 Python 2 版本保持兼容,例如Python 2.7 之前的任何东西。

使用 __import__ 的一个副作用可能是它返回导入的模块并且不向命名空间添加任何内容;如果您不想要新名称,则可以使用它导入,而无需删除新名称; using import somename 会将 somename 添加到您的命名空间,但 __import__('somename') 会返回导入的模块,然后您可以忽略它。出于这个原因,Werkzeug 在一个地方使用了钩子(Hook)。

所有其他用途都与动态导入有关。 Werkzeug 仍然支持 Python 2.6,所以不能使用 importlib


* importlib 是纯 Python 实现,而 import_module() 将使用该实现,而 __import__ 将使用 C 优化版本。两个版本都回调 importlib._bootstrap._find_and_load(),所以区别主要是学术性的。

关于python - 导入 vs __import__() vs importlib.import_module()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com