import vs __import__( ) vs importlib.import_module( )?(IMPORT VS__IMPORT__()VS IMPORTLIB.IMPORT_MODULE()?)
问题描述
我注意到Flask正在使用Werkzeug__import__一个模块,我有点困惑。我查看了它上的文档,发现它似乎在某种程度上让您在查找模块的位置方面有了更多的控制权,但我不确定确切地如何,我也完全不知道它与importlib.import_module有什么不同。
Werkzeug示例中的奇怪之处在于它只表示__import__(import_name),所以我看不出这与只使用import语句有什么不同,因为它忽略了可选的额外参数。
有谁能解释一下吗?我看了看其他人以前也问过类似的问题,但他们的问题措辞不是很清楚,答案完全没有涉及到这个问题。
推荐答案
__import__是一个用于导入模块的低级钩子函数;它可以用于通过指定要作为变量导入的模块名称来动态导入模块,这是import语句所不允许的。
importlib.import_module()是对挂钩进行包装,以便为该功能生成一个不错的API;它是最近添加到Python2中的,并在Python3中得到了更丰富的内容。使用的代码库通常这样做是因为它们希望保持与较旧的Python2版本(例如,任何早于Python2.7的版本)的兼容性。
使用__import__的一个副作用可能是它返回导入的模块,并且不会向名称空间添加任何内容;如果您不想要新名称,则可以使用它进行导入,而不必删除新名称;使用somename会将somename添加到名称空间,但是__import__('somename')返回导入的模块,然后您可以忽略该模块。Werkzeug为此在一个位置使用挂钩。
所有其他用途都与动态导入有关。Werkzeug仍然支持Python2.6,因此无法使用importlib。
*importlib是一个纯Python实现,import_module()将使用该实现,而__import__将使用C优化版本。这两个版本都回调到importlib._bootstrap._find_and_load(),因此差异主要是学术上的。
这篇关于IMPORT VS__IMPORT__()VS IMPORTLIB.IMPORT_MODULE()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:IMPORT VS__IMPORT__()VS IMPORTLIB.IMPORT_MODULE()?
基础教程推荐
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 包装空间模型 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 求两个直方图的卷积 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
