使用“__import__”从字符串变量导入模块:与普通导入语句的区别
在 Python 中,import函数允许从字符串变量动态导入模块。但是,与使用常规导入语句相比,这可能会导致意外结果。
考虑以下示例:
import matplotlib.text as text x = dir(text) # Get attributes of matplotlib.text i = __import__('matplotlib.text') y = dir(i) # Get attributes of the imported module j = __import__('matplotlib') z = dir(j) # Get attributes of matplotlib
结果列表的比较表明 y 对象包含以下内容的混合:来自 matplotlib 和 matplotlib.text 的属性,而它缺少有关 matplotlib.text 中主类的所需信息。
此行为由导入函数的机制。默认情况下,它导入由字符串参数指定的顶级模块。在本例中,“matplotlib.text”引用 matplotlib.text 模块,但 import 改为导入 matplotlib。
要解决此问题,您可以提供一个空字符串作为第三个参数到 __import__,如以下修改后的代码所示:
i = __import__('matplotlib.text', fromlist=['']) y = dir(i) # Get attributes of matplotlib.text
这将导致 import 到专门导入 matplotlib.text 模块,导致 y 包含所需的属性列表。
另一种方法是使用 Python 3.1 的 importlib 模块:
import importlib i = importlib.import_module("matplotlib.text") y = dir(i) # Get attributes of matplotlib.text
此方法提供了从字符串导入模块的更一致和直接的方法
注意:
以上是从字符串变量导入模块时,Python 的 `__import__` 与标准 `import` 有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!