python学习-绝对导入与相对导入、包、软件开发目录、常见内置模块
绝对导入与相对导入
"""
只有涉及到模块的导入 那么sys.path永远已执行文件为准
"""
绝对导入
其实就是以执行文件所在的sys.path为起始路径 逐层查找
from 文件 import py文件
from aa.bb.cc import b
ps:由于pycharm会自动将项目根目录添加到sys.path中所以查找模块肯定不报错的方法就是永远从根路径往下逐层查找
如果不是用pycharm运行 则需要将项目跟目录添加到sys.path(针对项目根目录的绝对路径有模块可以帮助我们获取>>>:os模块)
相对导入
储备知识
.在路径中指当前路径
..在路径中指上一层路径
../..在路径中意思是上上一层路径
相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准
1.只能在模块文件中使用 不能在执行文件中使用
2.相对导入在项目比较复杂的情况下 可能会出错
ps:相对导入尽量少用 推荐使用绝对导入
包的概念
1.如何理解什么是包?
专业的角度:内部还有__init__.py的文件
直观的角度:就是一个文件夹
2.包的作用
内部存放多个py文件(模块文件) 仅仅是为了更加方便的管理模块文件
3.具体使用
import 包名
导入包名其实导入的是里面的__init__.py文件(该文件里面有什么用什么)
其实也可以跨过__init__.py直接导入包里面的模块文件
"""
针对python3解释器 其实文件夹里面有没有__init__.py已经无所谓了皆是包
但是对于python2解释器 文件夹下面必须要有__init__.py才能被当做包
"""
编程思想的转变
1.小白阶段
按照需求从上往下堆叠代码 单文件
2.函数阶段
将代码按照功能的不同封装成不同的函数 单文件
3.模块阶段
根据功能的不同拆分不同的模块文件 多文件
"""
小白阶段好比将所有的文件全部存储在C盘并且不分类
函数阶段相当于将所有的文件在C盘下分类存储
模块阶段相当于将所有的文件按照功能的不同分门别类到不同的盘中
目的是为了更加方便快捷的管理资源
"""
软件开发目录规范
针对上述的第三个阶段 分模块文件多了之后还需要有文件夹
我们所使用的所有程序目录都有一定的规范(有多个文件夹)
1.bin文件夹
用于存储程序的启动文件 start.py
2.conf文件夹
用于存储程序的配置文件 settings.py
3.core文件夹
用于存储程序的核心逻辑 src.py
4.lib文件夹
用于存储程序的公共功能 common.py
5.db文件夹
用于存储程序的数据文件 userinfo.txt
6.log文件夹
用于存储程序的日志文件 log.log
7.interface文件夹
用于存储程序的接口文件 user.py order.py goods.py
8.readme文件(文本文件)
用于编写程序的说明、介绍、广告 类似于产品说明书
9.requirements.txt
用于存储程序所需的第三方模块名称和版本
"""
在编写软件的时候 可以不完全遵循上面的文件名
start.py可以放在bin文件夹下也可以直接放在项目根目录
db文件夹等我们学到真正的项目会被数据库软件替代
log文件夹等我们学到真正的项目会被专门的日志服务替代
"""
常见内置模块
1.collections模块
给我们提供了更多数据类型
from collections import namedtuple
Point = namedtuple('二维坐标系',['x','y'])
res1 = Point(1, 3)
res2 = Point(10, 49)
print(res1, res2) # 二维坐标系(x=1, y=3) 二维坐标系(x=10, y=49)
print(res1.x) # 1
print(res1.y) # 3
Point = namedtuple('三维坐标系','x y z')
res1 = Point(1, 3, 44)
res2 = Point(10, 49 ,55)
print(res1, res2) # 三维坐标系(x=1, y=3, z=44) 三维坐标系(x=10, y=49, z=55)
# 双端系列
from collections import deque
q = deque()
q.append(11)
q.append(22)
q.append(33)
q.append(44)
q.appendleft(55)
print(q) # deque([55, 11, 22, 33, 44])
from collections import OrderedDict
d = dict([('a',1),('b',2),('c',3)])
print(d) # {'a': 1, 'b': 2, 'c': 3}
od = OrderedDict([('a',1),('b',2),('c',3)])
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#有如下值集合 [11,22,33,44,55,66,,77,88,99]
# 将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中
{'k1':[],'k2':[]}
from collections import defaultdict
res = defaultdict(k1=[],k2=[])
print(res)
res = 'abcdeabcdeabcde'
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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了