目录
一、绝对导入与相对导入
1.绝对导入
就是已执行文件所在的sys.path为起始路径,往下一层层的找
2.相对导入
储备知识:
. 在路径中意思是当前路径
… 在路径中意思是上一层路径
…/… 在路径中意思是上上一层路径
相对导入路径可以不参考执行文件所在路径,而是已当前模块所在路径为准
不足之处:
只能在当前模块中使用,不能在执行文件里操作
相对导入在复杂的文件里使用可能会出错
ps:推荐使用绝对导入
二、包的概念:
包就是文件中含有__init__.py文件的文件夹
包的作用
包的内部放入多个py文件是为了更加方便、便捷的管理模块文件
具体使用:
import包名
导入包名其实就是使用里面的__init__.py文件
其实也可以直接跳过__init__.py文件,而直接使用其他模块文件
三、编程思想的转变:
1.小白阶段
按照需求一层层的堆叠代码(类似面条版) 单文件
2.函数阶段
将不同的代码封装成不同的函数 单文件
3.模块阶段
将不同的功能拆封成对应的功能模块文件 多文件
小白阶段相当于将所有文件存储在一个盘中并且杂乱无章
函数阶段相当于将所有文件有序的存储在一个盘中
而模块阶段相当于将所有文件按照不同功能并有序的分到不同的盘中
*ps:这是一种进步,更加方便快捷高效的管理资源*
四、软件开发目录规范
根据上面讲到的三种情况,分类模块多了还需要用文件夹分类存储
我们使用的所有的程序目录都有一定的规范(含有多个文件夹)
序号 | 文件夹名称 | 功能 | 文件名 |
---|---|---|---|
1 | bin文件夹 | 用于存储程序的启动文件 | start.py |
2 | core文件夹 | 用于存储程序的核心逻辑 | scr.py |
3 | conf文件夹 | 用于存储程序的配置工作 | settings.py |
4 | lib文件夹 | 用于存储程序的公共功能 | common.py |
5 | db文件夹 | 用于存储程序的数据文件 | userinfo.txt |
6 | log文件夹 | 用于存储程序的日志文件 | log.log |
7 | interface文件夹 | 用于存储程序的接口文件 | start.py |
8 | 用于编写程序说明、介绍、广告,类似于产品说明书 | readme.txt | |
9 | 用于存储程序所需的第三方模块名称和版本 | requirement.txt |
ps:以上文件名仅供参考,可以不完全遵循
五、常见内置模块
1.collections模块
给我们提供了更多数据类型!!!
from collections import namedtuple
Point = namedtuple('二维坐标系', ['x', 'y'])
res1 = Point(4, 8)
res2 = Point(14, 6)
print(res1, res2) #二维坐标系(x=4, y=8) 二维坐标系(x=14, y=6)
print(res1.x) #4
print(res1.y) #8
Point = namedtuple('三维坐标系', ['x', 'y', 'z'])
res1 = Point(4, 8, 16)
res2 = Point(14, 6, 20)
print(res1, res2) #三维坐标系(x=4, y=8, z=16) 三维坐标系(x=14, y=6, z=20)
p = namedtuple(('扑克牌'), ['花色', '点数'])
res1 = p('♥', 'Q')
res2 = p('♠', 'K')
print(res1, res2) #扑克牌(花色='♥', 点数='Q') 扑克牌(花色='♠', 点数='K')
双端队列
from collections import deque
q = deque(['2a','3b','5c'])
q.append('6i')
q.append('1o')
q.appendleft('0D')
print(q) #deque(['0D', '2a', '3b', '5c', '6i', '1o'])
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
有如下值集合 [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
{'k1':[], 'k2':[]}
from collections import defaultdict
res = defaultdict(k1=[],k2=[])
print(res)
res = 'abcdeabcdabcaba' # {'a':2,'b':5 }
# new_dict = {}
# for i in res:
# if i not in new_dict:
# new_dict[i] = 1
# else:
# new_dict[i] += 1
# print(new_dict)
from collections import Counter
res1 = Counter(res)
print(res1)
2.时间模块之time模块
时间的三种格式
1.时间戳 time.time()
2.结构化时间 time.gmtime()
3.格式化时间 time.strftime()
import time
print(time.time()) #1657807247.4397857
print(time.gmtime()) #time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=13, tm_min=55, tm_sec=46, tm_wday=3, tm_yday=195, tm_isdst=0)
print('时间:',time.strftime('%Y-%m-%d %X')) #时间: 2022-07-14 22:08:55