模块

名称空间是名称到对象的映射。名称空间是纯粹意义上的名字和对象间的映射关系,而作用域还指出了变量的作用范围。在模块导入时,模块文件的全局作用域变成了模块对象的名称空间。

Python解释其首先加载内建名称空间。它由__builtins__模块中的名字构成。随后加载执行模块的全局名称空间。如果在执行期间调用了一个函数,将创建出局部名称空间。

__builtins__模块包含内建名称空间中内建名字的集合,其中大多数来自__builtin__模块,该模块包含内建函数,异常以及其他属性。

遍 历模块搜索路径,找到符合的文件后,若有必要,Python会将其编译成字节码。Python会检查文件的时间戳,若发现字节码文件比源文件旧(也就是说 修改过源文件),就会在运行时自动重新生成字节码。若不比源文件旧,就会跳过源代码到字节码的编译步骤。若只发现了字节码文件,而无源代码,就会直接加载 字节码。顶层文件没有字节码文件,只有被导入的文件才会留下.pyc文件。


模块搜索路径:

1、程序的主目录:包含程序的顶层文件的目录

2、PythonPath目录:Path环境变量中设置的目录

3、标准库目录

可以通过sys.path查看模块搜索路径。


globals(),locals()分别返回调用者全局和局部名称空间的字典。

sys.modules变量包含一个由当前载入到解释其的模块组成的字典,模块名为键,它们的位置为值。

如果不想魔个模块属性被“from module import *”导入,可以在属性名称上加一个下划线。


包导入是把计算机上的目录变车给内另一个Python名称空间,而属性对应于目录中所包含的子目录和模块文件。

包 是一个有层次的文件目录结构。它定义了一个由模块和子包组成的Python应用程序执行环境。使用点操作符向下引用子包树。在子包中必需有 __init__.py文件,这是初始化模块,可以为空,可以在其中使用__all__列表来定义目录以from *语句形式导入时,需要导出什么。


模块的设计理念:同函数一样,聚合度高,有统一的目标。耦合度低,模块尽可能于其他模块的全局变量无关,试着通过返回值来传递结果,而不是跨模块修改。



你可能感兴趣的:(python)