模块
是一个命名空间,也是一个模块对象
含义:模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。(模块就是程序)
作用:
- 封装代码
- 实现代码的重用
补充:
- 容器 ->数据的封装
- 函数 ->语句的封装
- 类 ->方法和属性的封装
语法:
- import 语句(隐性运算)
含义:导入整个模块,包括声称一个以模块名命名的命名空间
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:
import module1[, module2[,… moduleN]
使用模块中的函数名时,使用格式为module1.函数 - from … import 语句
含义:只导入指定模块的部分属性到当前的命名空间
from modname import name1[, name2[, … nameN]]
这个声明不会把整个模块(from后的模块)导入到当前的命名空间中,它只会将import后的函数引入进来。(可直接使用,不需要在用) - from … import * 语句
含义:把一个模块的所有内容全都导入到当前的命名空间也是可行的,
from modname import *
但是那些由单一下划线(_)开头的名字不在此例。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。(不建议使用) - Import … as…
导入一个模块(命名空间),并且给这个命名空间起一个别名
注意:使用了as后,只能使用别名,不能使用原始名称
Import和from的区别
注意:
- import将整个模块对象赋值给一个变量名
- from将一个或多个变量名赋值给导入此模块的模块中的同名对象(若当前命名空间已经有了一个相同数属性,from之后被覆盖)
Import语句导入指定的模块时,系统执行的步骤:
- 找到模块文件
在指定路径下搜索模块文件 - 编译成字节码
文件导入时就会编译,因此,顶层文件的pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件(pyc文件就是.py文件编译后的文件) - 执行模块的代码来创建其所定义的对象
模块文件中的所有语句会依次执行,从头到尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件属性
注意:
- 模块只有在第一次导入时才会执行如上步骤
- 后续导入操作只不过是提取内存中已加载的模块对象
- reload()可用于重新加载模块
深入模块
模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。
__name__属性
- 系统工作流程:一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,被引入的模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。(是在被引用的模块进行判断, name__是否等于__main)(在被引入的模块中加入__name__ == “nain”的判断)
注意:在引入某模块时候,是先将被引入的模块的代码执行一遍,在从主程序上进行顺序执行。if __name__ == "__main__": print(“主程序”) else: print(“不是主程序”)
- 搜索路径:
含义:在程序导入模块的时候,系统会到默认路径中去搜索,找到了就导入,找不到就报错。
以下代码显示系统的搜索路径:import sys print(sys.path)
实行结果:
[‘E:\project’, ‘E:\project’, ‘E:\project\venv\Scripts\python36.zip’, ‘E:\Anaconda3\DLLs’, ‘E:\Anaconda3\lib’, ‘E:\Anaconda3’, ‘E:\project\venv’, ‘E:\project\venv\lib\site-packages’, ‘E:\project\venv\lib\site-packages\setuptools-39.1.0-py3.6.egg’, ‘E:\project\venv\lib\site-packages\pip-10.0.1-py3.6.egg’, ‘D:\PyCharm 018.1.4\helpers\pycharm_matplotlib_backend’]
- 将要导入的模块的路径添加到系统的搜索路径中(一般将模块导入到site-packages文件夹中 ):
sys.path.append("路径")
包(package)
含义:包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境
包的创建流程:
- 创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字
- 在文件夹中创建_init_.py的模块文件,内容可以为空(必须创建,用来告诉python,把这个文件夹当作一个包)
- 将相关的模块放入文件夹中
在程序中导入包:Import 包名.模块名
补充:init.py的模块文件通常为空,仅用于扮演包初始化的挂钩,替目录产生模块命名空间以及使用目录导入时实现from * 行为的角色