day14-模块和包
一、模块介绍
二、软件开发规范
一、模块介绍
1.1 什么是模块
就像我们小时候玩的乐高积木,我们可以通过乐高积木拼小机器人,拼小飞机等等,每一个不同色彩大小的积木就可以称之为模块,反过来看,我们想做一个功能全面的购物车程序,我们可以在一个py文件里写出来,但这样看起来太臃肿了,而且可读性差,不便于理解,所以我们可以通过函数把每一个小功能块进行细分,然后把功能相近或者有类似作用的小功能块放在一起,这个就是一个模块,所以模块就是遇阻功能的结合体,通过导入模块,我们可以来调用模块里预知好的功能。
比如我们的time模块,里面包含了时间相关的一些功能,我们通过import time 的方式来调用
1.2 模块的分类:
1、用py写的.py的文件
2、把一套的py文件放到一个文件夹里,打包成一个包
3、使用c语言编写并连接到python解释器的内置模块
4、已被编译成共享库或DLL的C或C++扩展
1.2 为什么要用模块?
1、通过调用别人已经写好的模块,可以极大的提升开发效率
我们不需要每次都从最底层开始写起,而是通过拼接半成品的模块,加上一些其它功能块就能实现预期功能
2、分门别类,更方便管理
我们自己开发的程序有的可能非常大,需要把它分成一块一块,同时有的功能可能被重复调用,这个时候做成模块,就可以大幅降低我们的重复低效的工作,也方便后期维护。
1.3 怎么使用模块?
1.3.1 使用import
a)可以通过调用 import kiki 来调用kiki.py
b)调用的过程:
--在内存中创建一个新的空间名称把kiki的源文件放进去
--当使用import kiki时,初始化kiki并执行模块中的代码
--创建名字kiki来引用该命名空间
c)独立的空间名称
kiki与kiki.money不冲突
d)为模块取别名
如果模块原本的名字很长很难记,可以as的方式,比如:import kikikikiki as ki 将起重命名为ki,这样对于后期的编写扩展很有帮助
e)一行导入多个模块
import time、sys、os
虽然上面的调用是可行的,但是不推荐,如果他们之间确实有关联可以这么写,不然最好一行行引用,方便后期的识别
1.3.2 from...import...
a)使用方法
from :某个地址或者某个模块,import 某个模块或者模块内的函数或者变量
b)与import 对比
好处:使用起来更方便
坏处:容易跟当前执行文件中的变量名冲突
c)也支持as的重命名
d)一行导入多个名字
同上建议,除非名字之间有联系,否则不推荐一行引入多个模块
e)全部导入
from kiki import * 把kiki中所有不时以下划线开头的名字都导入当前的位置
不推荐这种读法,会导致之前定义的变量名被覆盖,而且可读性很差
模块的搜索路径:
内存中已经加载的模块=>内置模块=>sys.path路径中包含的模块
二、软件开发规范
soft/ ├── bin # 程序执行文件目录 │ └── start.py # 程序开始执行脚本文件 ├── conf # 配置文件目录 │ ├── config.ini # 配置文件 │ ├── my_log_settings.py # 日志文件配置脚本 │ └── settings.py # 配置脚本 ├── core # 核心模块 │ ├── src.py # 核心功能脚本 核心逻辑文件 │ └── __init__.py ├── db # 数据--文件目录 ├── lib # 库文件目录 │ └── common.py # 库脚本文件 公共的功能 └── log # 日志目录 └── all2.log # 日志文件
--readme # 文本文件,介绍项目
启动文件一般放在bin里,或者直接放到根目录下
# 调用sys和os模块
import sys import os # 获取当前所在位置的根目录 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 获取项目的根目录 sys.path.append(BASE_DIR) # 将项目的根目录添加到环境变量中
# 导入用户功能层的src.py文件 from core import src
if __name__ == '__main__': src.run() # 执行src中的run方法启动程序