《Python学习手册 第五版》 -第22章 模块:宏伟蓝图

前面的章节是围绕函数展开的,接下来的章节会更上一层楼,针对模块展开研究

本章重点内容:

1、什么是模块

2、为什么使用模块

3、如何使用模块:模块的导入和属性

4、模块是如何导入的:import如何工作

5、模块的搜索路径

6、模块的选择

接下来,针对每一个重点展开详细说明

1、什么是模块

模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突,从实际的角度来看,模块往往对应于Python程序文件,每一个文件都是一个模块

2、为什么使用模块

 

1)代码重用,这个和函数一样,减少代码冗余,重复高效利用代码

2)系统命名空间的划分:一个程序是庞大的,涉及到很多内容,可以通过不同的模块管理,避免命名空间的混乱

3)实现共享的服务和数据:因为重用,而且可以按需使用,实现共享

3、如何使用模块:模块的导入和属性

模块的导入有三种方式

1)import:使用户程序(导入者)以一个整体获取一个模块(这也是我们最经常看到和使用的方式)

2)from:允许用户程序从一个模块文件中获取特定的名称

3)imp.reload:提供了一种在不终止Python程序的情况下重新载入模块文件代码的方法

模块属性的使用

和调用函数内属性一样,通过【.】来使用,只不过前面就是模块的名称,例如 模块名.属性

具体代码示例如下:

创建一个简单的模块b,内容仅是一个简单的函数,把它单独存为一个文件,后缀为.py.然后再创建a文件,a调用b

 

 

4、模块是如何导入的:import如何工作

模块的导入,很重要的一点就是【import】,理解了import就理解了模块的导入工作

如果程序是第一次导入模块时,会执行三个步骤,也就是说import语句,依次会执行以下内容

第一:搜索,找到模块文件

这个容易理解,就是你要使用哪个模块,就需要先找到这个模块,就需要先明确模块的名称,然后通过标准搜索路径找到这个模块

第二:编译(可选) 编译成字节码(如果需要的话)

找到需要的模块后,需要编译,也就是需要转换成程序能使用的字节码,之所以说可选,是因为,如果模块之前导入过,已经在内存中,系统判定是最新的后,就不需要再编译

第三:运行,执行模块的代码来创建其定义的对象

编译后,或者找到可用的字节码后,程序会运行字节码,文件中所有的语句从从头到尾依次执行,创建模块内所使用的属性或函数,之后使用时,就可以直接调用了

以上三个步骤,是系统后台自动完成的,所以无法通过代码示例,我们能看到的就是一行import代码

5、模块的搜索路径

三个步骤中,最主要的就是第一个步骤,也就是搜索,知道了模块名称,如何找到模块呢,毕竟模块有很多,代码中也没有看到路径,那系统是通过什么路径自动找到模块的呢?

Python的模块搜索路径主要涵盖以下:

1)程序的主目录

Python首先会在主目录内搜索被导入的文件,当在交互式命令行下工作时,主目录就是你当前工作的主目录

2)PYTHONPATH目录(如果设置了的话)

如果你想导入的模块不在主目录,可以通过这个选项进行设定,来指定路径进行搜索

3)标准库目录

这个系统自动设定的,因为基本每个模块都会用到标准模块,所以标准库就是必须的,既然是必须的,就不用单独设定,直接使用即可

4)任何.pth文件中的内容(如果存在的话)

这个不常用,可以看成是PYTHONPATH的替代方案,通过后缀名.pth的文本文件中一行一行的列出目录

5)第三方扩展应用的site-packages主目录

大多数第三方扩展安装在site-packages目录下,所以Python会自动将标准库site-pachages添加到模块搜索路径中

以上5个内容组合起来就变成了sys.path,也就是系统搜索路径;其中第一个、第三个是自动被定义的,也就是系统自动设定的,不用我们调整;第二和第四组件是可以用于扩展路径

我们可以通过sys.path代码来查看当前系统的搜索路径,代码如下:

 

 第一个就是主目录,也就是当前工作目录

6、模块的选择

你可能有一个疑问,如果在多个路径中,有同样的模块名称,系统如何选择呢?这就是选择优先级的问题,系统会依次查看,如果先找到,系统不会再往下寻找,会直接使用

以上,就是本章重点内容的讲解,因为主要是讲解程序运作的逻辑,所以文字偏多,好了,就到这,下章再见!

 

《Python学习手册 第五版》 每章时间规划及完成进度:

2019.11.25-2019.12.01 第01章,已完成:《Python学习手册 第五版》 -第1章 问答环节

2019.12.02-2019.12.08 第02章,已完成:《Python学习手册 第五版》 -第2章 Python如何运行程序

2019.12.09-2019.12.15 第03章,已完成:《Python学习手册 第五版》 -第3章 你应如何运行Python程序

2019.12.16-2019.12.22 第04章,已完成:《Python学习手册 第五版》 -第4章 介绍Python对象类型

2019.12.23-2019.12.29 第05章,已完成:《Python学习手册 第五版》 -第5章 数值类型

2019.12.30-2020.01.05 第06章,已完成:《Python学习手册 第五版》 -第6章 动态类型

2020.01.06-2020.01.12 第07章,已完成:《Python学习手册 第五版》 -第7章 字符串基础

2020.01.12-2020.01.19 第08章,已完成:《Python学习手册 第五版》 -第8章 列表与字典

2020.01.20-2020.01.26 第09章,已完成:《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型

2020.01.27-2020.02.02 第10章,已完成:《Python学习手册 第五版》 -第10章 Python语句简介

2020.02.03-2020.02.09 第11章,已完成:《Python学习手册 第五版》 -第11章 赋值、表达式和打印

2020.02.10-2020.02.16 第12章,已完成:《Python学习手册 第五版》 -第12章 if测试和语法规则

2020.02.17-2020.02.23 第13章,已完成:《Python学习手册 第五版》 -第13章 while循环和for循环

2020.02.24-2020.03.01 第14章,已完成:《Python学习手册 第五版》 -第14章 迭代和推导

2020.03.02-2020.03.08 第15章,已完成《Python学习手册 第五版》 -第15章 文档

2020.03.09-2020.03.15 第16章,已完成:《Python学习手册 第五版》 -第16章 函数基础

2020.03.16-2020.03.22 第17章,已完成:《Python学习手册 第五版》 -第17章 作用域

2020.03.23-2020.03.29 第18章,已完成:《Python学习手册 第五版》 -第18章 参数

2020.03.30-2020.04.05 第19章,已完成:《Python学习手册 第五版》 -第19章 函数的高级话题

2020.04.06-2020.04.12 第20章,已完成:《Python学习手册 第五版》 -第20章 推导和生成

2020.04.13-2020.04.19 第21章,已完成:《Python学习手册 第五版》 -第21章 基准测试

2020.04.20-2020.04.26 第22章,已完成 

2020.04.27-2020.05.03 第23章,未完成

 

以下链接,可以供你了解这个学习笔记的所有章节最新进度

自学笔记系列:《Python学习手册 第五版》 -写在开始之前

posted @ 2020-04-22 07:02  诡刺-ThornSoul  阅读(320)  评论(0编辑  收藏  举报