目录
本章内容概要
1.绝对导入与相对导入
2.包的概念
3.编程思想的转变
4.软件开发目录规范‘
5.常见内置模块
本章内容详解
1. 绝对导入与相对导入
1.1 导入
- 只要涉及到模块的导入,那么sys.path 永远以执行文件为准
1.2 代码推导
- 模块之间可以导其他模块
- 任何模块中,只要涉及到模块的导入,那么查找路径都是按照执行文件为准
- 绝对导入
- 多层文件导入
- 相对导入
1.3 绝对导入
- 以执行文件所在的sys.path为起始路劲 往下一层层查找
# 如
from ccc import b
from ccc.ddd.eee import b
- 由于phcharm会自动将项目根目录添加到sys.path中所以查找模块肯定不报错的方法就是永远从根路劲往下一层层找
- 如果不是用pycharm运行,则需要将项目跟目录添加到sys.path(针对项目的根目录的绝对路劲有模块可以帮助我们获取:os模块)
1.4 相对导入
- 储备知识
.在路径中意思是当前路经
..在路劲中的意思是上一层路经
../..在路劲中意思是上上一层路径 - 相对导入可以不参考执行文件所在的路径,直接以当前模块文件路径为准
只能在模块文件中使用,不能在执行文件中使用
相对导入在项目比较复杂的情况下可能会出错 - 相对导入尽量少用,推荐使用绝对导入
2. 包的概念
2.1 如何理解包
- 专业的角度:内部含有__init__.py的文件夹
- 直观的角度:就是一个文件夹
2.2 包的作用
- 内部存放多个py文件(模块文件) 仅仅是为了2更加方便的管理模块
2.3 具体使用
- import 包名
- 导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么)
- 也可以跨过__init__.py直接导入包里面的模块文件
- 针对python3解释器,其实文件夹里面有没有__init__.py已经无所谓了,都是包
- 针对python2解释器,文件夹下面必须有__init__.py才能被当做包
3. 编程思想的转变
3.1 小白阶段
- 按照需求从上往下堆叠代码(面条版) 单文件模式
- 相当于将所有的文件全部存储在C盘并且不分类
3.2 函数阶段
- 将代码按照功能的不同封装成不同的函数 单文件模式
- 相当于将所有文件在C盘下分类存储
3.3 模块阶段
- 根据功能的不同拆分不同的模块文件 多文件模式
- 相当于将所有的文件按照功能的不同分别分类到不同的盘中,目的为了更加方便快捷高效的管理资源
- 分模块文件多了之后还需要有文件夹
4. 软件开发目录规范
- 我们所使用的所有程序目录都有一定的规范,有多个文件夹
4.1 bin文件夹
- 用于存储程序的启动文件 start.py
4.2 conf文件夹
- 用于存储程序的配置文件 settings.py
4.3 core文件夹
- 用于存储程序的核心逻辑 src.py
4.4 lib文件夹
- 用于存储程序的公共功能 common.py
4.5 db文件夹
- 用于存储程序的数据文件 userinfo.txt
4.6 log文件夹
- 用于存储程序的日志文件 log.log
4.7 interface文件夹
- 用于存储程序的接口文件 user.py order.py goods.py
4.8 readme文件(文本文件)
- 用于编写程序的说明,介绍,广告,类似于产品说明书
4.9 requirements.txt文件
- 用于存储程序所需的第三方模块名称和版本
4.10 总结
- 编写软件的时候 可以不完全遵循上面的文件名
- start.py可以放在bin文件夹下也可以直接放在项目根目录
- db文件夹等我们学到真正的项目会被数据库替代
- log文件夹等我们学到真正的项目会被专门的日志服务替代
5. 常见内置模块
5.1 collections模块
- 在内置数据类型(dict,list,set,tuple)的基础上,collections模块还提供几个额外的数据类型:Counter,deque,defaultdict,namedtuple,OrderdDict等
- namedtuple 生成可以使用名字来访问元素内容的tuple,二维坐标系和三维坐标系
from collections import namedtuple
Point = namedtuple('二维坐标系',['x','y'])
res1 = Point(1,2)
res2 = Point(3,4)
print(res1, res2)
print(res1.x)
print(res2.y)
from collections import namedtuple
Point = namedtuple('三维坐标系','x y z')
res1 = Point(1,2,3)
res2 = Point(3,4,5)
print(res1, res2)
print(res1.x)
print(res2.y)
print(res2.z)
3. deque 高效实现插入和删除操作的双向列表,适合用于队列和栈
from collections import deque
q = deque()
q.append(11)
q.append(22)
q.append(33)
q.appendleft(44)
print(q)
4. OrderedDict 有序字典,Key会按照插入的顺序排列,不是Key本身排序
from collections import OrderedDict
a = dict([('a', 1), ('b', 2), ('c', 3)])
b = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(b)
5. Counter 目的是用来跟踪值出现的次数
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
5.2 时间模块
- 表示时间的三种格式
时间戳,结构化时间,格式化时间 - 时间戳 timetime() 时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
import time
print(time.time()) # 1657791294.936325
- 结构化时间 time.gmtime()
import time
# print(time.time()) # 1657791294.936325
print(time.gmtime()) # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=59, tm_sec=19, tm_wday=3, tm_yday=195, tm_isdst=0)
- 格式化时间 time.strftime() %Y-%m-%d %H-%M-%S
import time
# print(time.time()) # 1657791294.936325
# print(time.gmtime())
print(time.strftime('%Y-%m-%d %H-%M-%S')) # 2022-07-14 19-00-56
- 转换
- 图表
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/274364.html