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文件夹等我们学到真正的项目会被专门的日志服务替代
"""

image

常见内置模块

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()

image
image

posted @ 2022-07-14 21:44  初学者-11  阅读(224)  评论(0编辑  收藏  举报