软件项目通常包含许多源文件,又叫模块(module)。一系列相关联的Python模块组成包(package)。我们对Python的学习就从这两个概念开始。
Python模块是指包含Python代码的文件,可以被其他Python模块或脚本导入。脚本(script)则是可以被执行的Python文件。
Python模块能够使不同文件之间共享代码,避免重复工作。
每个Python文件都可以访问一个名为__name__的全局变量,此变量有两个可能的值:
❍模块名称,即不包括.py后缀的文件名;
❍'__main__'字符串。
Python根据该文件是由其他模块导入还是作为脚本运行来决定变量__name__的值。当该模块被导入另一个模块或脚本时,__name__被设置为模块的名称。如果将模块作为脚本运行,如下所示:
则__name__的值会被设置为'__main__'。这可能有点抽象,不过我们将在本章的后面部分解释为什么我们要关注这个全局变量。你会发现,一个模块是被导入还是作为脚本运行,这个信息非常重要,我们需要关注。
随着我们为项目编写的Python模块越来越多,将这些模块根据功能进行分组也顺理成章。这些分组被称为包。
包(package)是包含Python模块和特殊文件的目录,该文件的名称必须是__init__.py。Python解释器会将任何包含__init__.py文件的文件夹视作一个包。
例如,如下文件夹就是一个Python包,名为geom2d:
这个包有两个文件:point.py和vector.py。
每当从包中导入某些内容时,__init__.py文件都会被执行。也就是说,__init__.py文件可以包含Python代码——通常是初始化代码。不过大部分时候,__init__.py都是空文件。