模块
一、模块简介
什么是模块:
模块就是一系列功能的结合体,例如.py文件
模块有什么用:
可以提高开发效率
模块的来源:
1. python解释自带的内置模块
2.别人已经写好的第三方模块
3.自定义的模块
模块的表现形式:
1.使用python编写的代码(.py文件)
2.已被编译为共享库或DLL的C或C++扩展
3.包好一组模块的包(文件夹) # 包其实就是多个py文件(模块)的集合 包里面通常会含有一个__init__.py文件
4.使用C编写并链接到python解释器的内置模块
二、import句式
在调用模块时可以采用一个特定的句式 imoprt 模块名 来调用该模块

导入模块时会发生的事情:
1.产生一个导入文件的全局名称空间
2.运行模块中的代码
3.产生一个模块的全局名称空间
4.使导入文件中的模块名指向模块的全局名称空间
ps:多次导入相同的模块只会执行一次
通过模块名.的方式可以调用模块中的所有的名字,并且名字不会冲突
三、from...import...句式
在调用模块时也使用from模块名import模块中的某个名字来导入

导入模块时发生的事情:
1.产生导入模块的文件的全局名称空间
2.执行模块中的文件
3.产生模块的全局名称空间
4.使导入的模块中的名字指向模块的全局名称空间
优点:
可以直接使用该模块中的名字使用
缺点:
如果导入模块的文件有和该模块中相同的名字,会发生冲突,会指向当前的名称空间。
四、导入模块拓展用法
1.起别名
可以在使用导入句式时在后面加个as和别名
import 模块名 as 别名
from 模块名 import 模块中的名字 as 别名
之后在导入模块的文件中便可以直接使用别名来使用该模块了
from m1 import name as f print(f) import m2 as f1 print(f1.name)

2.连续导入
import句式 (导入多个模块)
方法1:import 模块名1,模块名2,模块名3...
方法2:import 模块名1
import 模块名2
import 模块名3
from...import...句式 (导入一个模块中的多个名字)
方法1:from 模块名 import 模块中的名字1,模块中名字2,模块中的名字3...
...
3.通用导入
from 模块名 import*(*号代表导入了模块中的所有名字)
使用__all__ = ['模块中的名字1',‘模块中的名字2’], 可以用来指定被*号导入的名字
五、判断文件类型
利用__name__来判断文件的类型,如果是执行文件,输出__name__会返回__main__,如果是被当作模块导入,则会返回模块名


如果想在被导入时不执行,可以将代码写在如下图所示
if __name__ == '__main__':
#将不想被导入执行的代码写在下面
六、循环导入的解决方法
1.调换顺序
导入语句放在最后,确认在导入前所有的名字已经加载过
2.利用函数
将导入的语句放入函数,在所有的名字都加载后在调用函数
七、模块导入的顺序
导入顺序:
1.先从内存中寻找
2.内置模块中寻找
3.最后去sys.path系统路径中寻找(自定义模块)# 结果中第一个元素永远是当前执行文件所在的路径
都没有找到就会报错
ps:如果自定义模块和内置模块名字相同,则会执行内置模块不会执行自定义模块
当某个自定义模块查找不到时的解决方案:
方式1:
import sys
sys.path.append('自定义模块路径')
方式2:
from 文件夹名称,文件夹名称 import 模块名
from 文件夹名称,模块名 import 模块中的名字

八、绝对导入与相对导入
在导入多个文件的模块时,一律按照执行文件所在路径为准
绝对导入:
始终按照执行文件所在的sys.path查找模块
相对导入:
使用句点符(.),一个句点符就是在当前路径,两个句点符就是上一层路径,一般情况下有两个句点符就已经够了。
可以打破一律按照执行文件所在的路径为准的规则,只考虑两个文件之间的位置
缺点:相对导入只能用在模块文件中,不能用在执行文件中,会出现报错
九、软件开发目录规范
bin文件夹(存放启动文件)
start.py #当启动文件只有一个时可以直接将文件放在外面
conf文件夹(存放配置文件)
settings.py
lib文件夹(存放公共的功能)
common.py
core文件夹(存放核心代码文件)
src.py
db文件夹(存放数据)
userinfo.txt
log文件夹(存放程序运行日志)
log.txt
readme.txt(产品说明)
requirements.txt(存放第三方模块)


浙公网安备 33010602011771号