Python导入模块的本质
Python导入模块的本质是将模块代码的定义和函数、变量等其他对象导入到当前代码中,以便在当前代码中使用。
当我们使用import语句导入一个模块时,Python解释器首先会在sys.modules中查找该模块是否已经导入过。如果模块已经导入过,解释器会直接从sys.modules中获取该模块的引用,并将其赋值给相应的变量。如果模块还没有导入过,解释器会执行以下步骤:
- 根据模块的名称在sys.modules中创建一个新的模块引用,以便查找和缓存已导入的模块。
- 根据模块的名称找到模块文件,并使用builtins作为全局作用域创建一个新的命名空间(即模块的命名空间)。
- 在新的命名空间中执行模块文件中的代码,将模块文件中的定义和语句加载到新的命名空间中。
- 将模块的命名空间绑定到sys.modules中相应的模块引用上,以便将模块缓存起来。
- 在当前代码中使用import语句的位置创建一个新的变量,并将模块的引用赋值给该变量,以便在当前代码中使用该模块。
通过这样的方式,我们可以在当前代码中使用已导入模块中定义的函数、变量和其他对象。