今日知识目录
一、绝对导入和相对导入
1.绝对导入
- 1> 什么是。绝对导入?
- 依据执行文件的sys.path中的根目录,一层层往下查找
- 由于pycharm会把项目根目录自动添加到sys.path中去,所以依据项目根目录一层层向下查找是绝对不会出错的
- 如果不是在pycharm中运行代码,则需要手动将根目录添加到sys.path中去(后期有os模块帮我们自动添加)
- 2> 代码实现:
from a.b.c import d.py
2.相对导入
- 1> ’ . ’ 的不同含义
- . 一个点:意思是当前路径
- … 两个点:意思是上一层路径
- …/… 意思是上上一层路径
- 2> 什么是相对导入?
- 以当前模块的路径为准,与执行文件的路径无关
- 3> 特点
- 相对导入只能在模块中使用
- 相对导入在项目比较复杂的情况下可能会出错
3.总结
综上所述,更推荐使用绝对导入
二、包
-
1.什么是包?
- 含有一个__ init__.py文件的文件夹
-
2.包的功能?
- 里面存放多个.py文件(模块文件),便于管理
-
3.在模块导入的功能上包和普通的文件夹有啥区别?
- 1> 包:执行文件只能够调用包中__ init__.py文件中有的名字,所以需要自己手动将自定义模块名导入到init文件中去,但是也可以通过绝代查找的方式跳过 init文件,直接把自定义模块导入执行文件
- 2> 文件夹:可以通过绝对导入的方式包自定义模块导入执行文件
-
4.导入语法
- import 包名
import package1
三、编程思想的转变
- 阶段1:小白阶段:过程式编程思维,每天写面条版代码
- 阶段2:函数阶段:学会的用函数封装各种功能
- 阶段3:模块阶段:根据不同的功能将代码拆分到各个模块中去,便于管理和调用
四、软件开发目录规范
- bin文件夹:存放启动文件start.py (start.py文件也可以直接放到项目根目录下,这样的话系统会自动添加路径)
- conf文件夹:存放配置文件settings.py
- core文件夹:存放核心代码文件src.py
- db文件夹:数据库文件,存放程序所需要调用的数据文件 (后期db文件夹会被数据库取代)
- log文件夹:存放日志文件,具有记录的功能 (后期项目中log文件夹会被专门的日志服务替代)
- lib文件夹:用于存放程序的公共功能common.py
- interface文件夹:用于存放程序的接口文件
- requirements文件夹:存放第三方模块名称和版本
- readme文本文件:说明程序的功能和一些相关的资料
五、常见的内置模块
-
1.collections模块
-
功能:给我们提供了更多的数据类型
-
常用的方法
-
1> nametuple:创建一个命名元组子类的工厂函数
-
代码实现
-
from collections import namedtuple point = namedtuple('三维坐标', ['x', 'y', 'z']) # 书写方式1 point = namedtuple('三维坐标', 'x y z') # 书写方式2 res1 = point(1, 2, 3) print(res1) # 三维坐标(x=1, y=2, z=3) print(res1.x) # 1 print(res1.y) # 2 print(res1.z) # 3
-
实际应用
-
p = namedtuple('扑克', ['花色', '点数']) res1 = p('红桃', 'K') res2 = p('黑方', '5') print(res1) # 扑克(花色='红桃', 点数='K') print(res2) # 扑克(花色='黑方', 点数='5')
-
2> deque:双端队列,可以实现两端快速添加(append)和弹出(pop)数据
-
代码实现
-
from collections import deque q = deque() q.append(111) q.append(222) q.append(333) q.append(444) q.append(555) q.append(666) print(q) # [111, 222, 333, 444, 555, 666] q.appendleft(777) print(q) # [777, 111, 222, 333, 444, 555, 666] q.pop() print(q) # [777, 111, 222, 333, 444, 555] q.popleft() print(q) # [111, 222, 333, 444, 555]
-
3> OrderedDict : 有序词典
-
代码实现
-
from collections import OrderedDict d = OrderedDict(a=1, b=2, c=3, d=4, e=5) print(d) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)])
-
4> Counter : 计数功能
-
res1 = 'aaablbblbisllssaa' from collections import Counter res1 = Counter(res1) print(res1) # Counter({'a': 5, 'b': 4, 'l': 4, 's': 3, 'i': 1})
-
-
2.time模块
-
1.时间戳:time.time()
-
代码实现
-
import time print(time.time()) # 1657785161.7287323
-
2.结构化时间:time.gmtime()
-
代码实现
-
import time print(time.gmtime()) # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=7, tm_min=54, tm_sec=2, tm_wday=3, tm_yday=195, tm_isdst=0)
-
3.格式化时间strftime(‘%Y-%m-%d %X’)
-
代码实现
-
import time print(time.strftime('%Y-%m-%d %X')) # 2022-07-14 16:01:08 print(time.strftime('%Y-%m-%d %H-%M-%S')) # 2022-07-14 16:01:08
-
4.不同时间格式之间的相互转换
-
1> 时间戳和结构化时间之间的相互转换
import time a = time.time() # 时间戳 b = time.gmtime() # 结构化时间 print(time.gmtime(a)) # 时间戳>>>结构化时间 print(time.mktime(b)) # 结构化时间>>>时间戳
-
2> 格式化时间和结构化时间之间的相互转换
-
import time b = time.gmtime() # 结构化时间 c = time.strftime('%Y-%m-%d %H-%M-%S') # 格式化时间 print(time.strptime(c, '%Y-%m-%d %H-%M-%S')) # 格式化时间>>>结构化时间 print(time.strftime('%Y_%m_%d %H_%M_%S', b)) # 结构化时间>>>格式化时间
-
3> 图示
-
-