导入与开发目录规范
绝对导入与相对导入
-
绝对导入
1.绝对导入其实就是在导入过程中以所执行文件为起始路径来寻找我们需要调用的代码,如果我们在pycharm中导入的话pycharm会帮我们直接取到本层或者下层文件中去寻找我们需要去调用的模块或者内容,但是如果是在上层或者其他层面中的模块调用的话那么我们就需要使用绝对导入功能,先调用内置模块import sys模块,然后将将调用文件的文件路径传输给sys模块那么我们才可以去调用该模块。
from aaa import new1
print(new1.name)
import sys
sys.path.append(r'D:\pythonProject\day23\aaa')
import new1
print(new1.name)
-
相对导入
1.相对导入其实就是不需要参考执行文件的路径直接以模块文件路径为准我们只需要在执行文件中调用模块文件即可,不过这样的作法容易出错所以我们一般推荐使用绝对导入
2.拓展
.在路径中意思是当前路径
..在路径中意思是上一层路径
../..在路径中意思是上上一层路径
from . import new1模块文件
from aaa.bbb.ccc import new1 # pycharm自动修改文件
print(new1.name) # 打印
包的概念
-
包的定义
1.对包的定义一共有两种
一种是在python2.x中文件夹内部必须带有__init__.py文件的才会被认为是包,调用的时候擦可以被调用,如果没有的话那么就不认识,我们不熟
第二种则是在python3.x中只要是个文件夹并且不管内部带不带__init__文件我们都认为他是一个包,但是我们在使用的时候还是比较建议给调用的文件夹中添加一个__init__的py文件,比较符合规范
最后包呢其实就是多个py文件放到同一个文件夹中,为了方便管理和调用创造出了一个名词叫做包
-
包的使用方法
1.首先我们要先应该现在包的内部找到__init__文件,然后在内部定义好这个文件同级别调用的模块以供别的执行 文件调用更方便一些例如form . improt xxx, xxx, xxx,然后再经过别的执行文件调用这个包的名字并且调用__init__文 件就可以了
编程思维的转变
-
开发小白阶段(小辣鸡)
1.在我们当一个十足的小辣鸡的时候,总是以为唉自己会写代码了还感觉蛮好的,然后就一个简单的程序写个几十行,厉害直接从上到下一串写完看起来较为麻烦和繁琐,我们可以成为面条版代码
-
函数编写与调用阶段(辣鸡)
1.当我们走到函数的阶段的时候我们就可以将一些繁琐的代码封装起来,使代码更简洁,然后复杂程度也高一点了,也可以在下方调用我们曾经写过的一些函数体代码,当然了还是个辣鸡嘻嘻
-
模块调用与功能分原处理(入门)
然后到了我们现在的阶段也就是学习模块的阶段,也是正式开始令人头秃的阶段,我们可以成为梦开始的阶段,当然了是噩梦(关于头发的噩梦)要开始来回各个文件之间互相调用,终于入门了
软件开发目录规范
文件夹名称 |
文件名 |
文件功能 |
bin文件夹 |
start.py |
用来存放程序的启动程序 |
conf文件夹 |
settings.py |
用来存储程序的配置型文件 |
core文件夹 |
src.py |
用于存放程序的核心逻辑文件 |
lib文件夹 |
common.py |
用于存放程序的公共性功能文件 |
bd文件夹 |
userinfo.py |
用于存储程序的数据文件 |
log文件夹 |
log.log |
用于存放使用该程序的日志文件 |
interface文件夹 |
user.py , order.py , good.py |
用于存放各代码之间的接口文件 |
readme文本文件 |
readme.txt |
用于编写程序说明、介绍等 |
requiremenrs文本文件 |
requirements.txt |
用于存放第三方模块和版本 |
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220714192943970-1450705385.png)
collections模块
-
模块内置功能之Namedtuple
1.namedtuple: 生成可以使用名字来访问元素内容的tuple,可以用来表示坐标轴等
from collections import namedtuple
point = namedtuple('point', ['X', 'Y', 'Z'])
p = point(5, 2, 1)
print(p) # point(X=5, Y=2, Z=1)
print(p.x, p.y, p.z) # 5 2 1
-
模块内置功能之Deque
1.deque: 双端队列,可以快速的从另外一侧追加和推出对象
from collections import deque
q = deque (['joseph', 'trump', 'alice' 'jon' 'lili'])
q.append('zoey')
q.appendleft('annabelle')
q.append('kayla')
print(q) # deque(['annabelle', 'joseph', 'trump', 'alice', 'jon', 'lili', 'zoey', 'kayla'])
q.pop() # deque(['annabelle', 'joseph', 'trump', 'alice', 'jon', 'lili', 'zoey'])
q.popleft() # deque(['joseph', 'trump', 'alice', 'jon', 'lili', 'zoey'])
-
模块内置功能之Counter
1.Counter: 计数器,主要用来计数,直接帮我们看出可迭代对象中一共出现了,多少次某个相同的元素并使用字典的方式返回
from collections import Counter
c = Counter(['joseph', 'trump', 'alice', 'jon', 'lili', 'joseph', 'lili','trump','joseph'])
print(c) # Counter({'joseph': 3, 'trump': 2, 'lili': 2, 'alice': 1, 'jon': 1})
-
模块内置功能之OrderedDict
1.OrderedDict: 有序字典,将无序字典变为有序字典
from collections import OrderedDict
d = dict([('name', 'joseph'), ('age', '21'), ('gender','male'), ('hobby', 'read')])
print(d) # {'name': 'joseph', 'age': '21', 'gender': 'male', 'hobby': 'read'}
# 其实应该是乱的但是pycharm太只能了帮我们理清了
od = OrderedDict([('name', 'joseph'), ('age', '21'), ('gender','male'), ('hobby', 'read')])
print(od) # OrderedDict([('name', 'joseph'), ('age', '21'), ('gender', 'male'),
('hobby', 'read')])
print('hobby') # hobby
-
模块内置功能之Defaultdict
1.defaultdict: 带有默认值的字典
from collections import defaultdict
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 520, 521]
dic1 = defaultdict(list)
for i in l1:
if i < 66:
dic1['k1'].append(i)
else:
dic1['k2'].append(i)
print(dic1)
time模块
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220714193128414-308834013.png)
1.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第 几周,一年中第几天,夏令时),打印时能够打印我们所在时区的时间
import time
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=7,
tm_mday=14, tm_hour=19, tm_min=16, tm_sec=33, tm_wday=3, tm_yday=195,
tm_isdst=0)
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
tm_year(年) |
比如2011 |
1 |
tm_mon(月) |
1 - 12 |
2 |
tm_mday(日) |
1 - 31 |
3 |
tm_hour(时) |
0 - 23 |
4 |
tm_min(分) |
0 - 59 |
5 |
tm_sec(秒) |
0 - 60 |
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1 - 366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
-
格式化时间
1.我们通过这些就可以直接打印出当前时间
import time
print(time.strftime("%Y-%m-%d %X")) # 2022-07-14 19:19:58
print(time.strftime("%Y-%m-%d %H-%M-%S")) #2022-07-14 19-19-58
print(time.strftime("%Y-%m-%d %H:%M:%S %p")) #2022-07-14 19:19:58 PM
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身