首页 > 解决方案 > 当 import math 被写入两次时,是否在第二个 import math 语句期间创建了引用?

问题描述

案例一

import math
import math

案例2

import math
from math import sqrt

什么时候import math写了两次,在第二个import math语句期间是否创建了引用?有人可以详细解释一下上述两种情况是如何发生的吗?

标签: pythonmathimportmodule

解决方案


导入的模块存储在sys.modules. 如果另一个人再次需要它们,import或者from ... import ...它们被从那里带走。

在案例 1 中,第 2 行不执行任何操作。更准确地说:它获取存储的math模块并math在周围的命名空间中设置以再次引用模块。

在案例 2 中,第 2 行查找已经加载的math,从中检索sqrt并将其放置在周围的命名空间中。

更新:显示相同模块的第二次导入覆盖周围命名空间中的名称的示例(通常具有相同的引用,但可以更改):

import sys
import re

import math
print(math) # nothing unusual: <module 'math' ...

sys.modules["math"] = re
print(math) # nothing unusual yet: <module 'math' ...

import math
print(math) # What?: <module 're' ...

推荐阅读