模块 module
(一)概念
1.1 模块的概念
当程序代码量变得相当大、逻辑结构变得非常复杂的时候,我们最好把代码按照逻辑和功能划分成一些有组织的代码块,并将其保存到一个个独立的文件当中。这些文件可以包含变量、可执行代码、函数、类或者这些东西的组合,这些自我包含并且有组织的代码块就是 模块 ( module )。模块是最高级别的 Python 代码组织单元。
1.2 模块的作用
-
代码重用:
因为模块对应于 Python 文件,所以模块中的代码可以永 久保存。你可以按照需要在代码中任意次数的使用导入的 模块中定义的变量名(函数、类等),甚至可以重新导入 模块。除了作为最高级别的Python 代码组织单元,模块 (以及模块包)也是 Python 中程序代码重用的最高层次
-
系统命名空间的划分
模块还是定义变量名的空间,其内部定义的变量名作为模 块的属性,可以通过导入被多个外部的文件中的代码引 用。 模块将变量名封装进了自己的命名空间,这一点对避免变 量名的冲突很有帮助。所有的一切都存在于 ”模块“ 中, 可执行 的代码以及创建的对象都毫无疑问的封装在模块 之中。正式由于这一点,模块是组织系统组件的天然工 具。
-
实现共享服务和数据
从操作的角度来看,模块对实现跨系统共享的组件是很方 便的,只需要在不同的文件中导入相同的模块即可。
1.3 模块和包的区别
模块:是一个python文件
包:是一个目录,可以包含多个模块,注意还必须__init__.py文件
(二)导入模块
2.1 第一次导入步骤
1、搜索找到模块文件。
2、编译成字节码(需要时)。
3、执行模块的代码来创建其所定义的对象,定义 import 语句所在文件的作用域的局部命名空间中的一个或多个变量名。
2.2 导入方式
- import 模块名
调用:模块名. 功能名 - import 模块名 as 别名
调用:别名.功能名 - from 模块名 import 功能名
调用:直接功能名 - from 模块名 import 功能名 as 别名
调用:直接用别名 - from 模块名 import * (一次性导入所有功能)
调用:直接功能名
2.3 模块的搜索路径
返回导入模块时的搜索路径集,为一个list列表——sys.path
- 从上面列出的目录里依次查找要导入的模块文件
- ’ ’ 表示当前路径
- 列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序
添加新的模块路径:
- sys.path.append(’/home/python/xxx’)
- sys.path.insert(0,’/home/python/xxx’) ——确保先搜索到该路径
- 注意点:sys.path.append(path)和sys.path.insert(path)添加的相关路径,在退出交互式环境或者IDE后会自动消失。
2.4 重新导入模块
import 导入模块只会导入一次,因此即使模块被修改了,import也不会重新导入
解决方案:
- 关闭终端,重新打开,然后再import 导入一次
- 用 reload 可以在不关闭终端的情况下重新导入
(三) 第三方模块的安装
3.1 使用pip命令安装
pip install 模块名
pip uninstall 模块名
pip freeze
:查看都安装了哪些模块
3.2 whl下载安装
- 网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 下载:pip install 文件包名
3.3 直接复制的方式
3.4 anaconda
(四) 自定义模块
- 在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
- 目录只有包含一个叫做__init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。