ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python基础】第24回 包和软件开发规范

2022-07-14 19:33:40  阅读:248  来源: 互联网

标签:24 文件 软件开发 python 导入 文件夹 模块 time print


目录

本章内容概要

1.绝对导入与相对导入
2.包的概念
3.编程思想的转变
4.软件开发目录规范‘
5.常见内置模块

本章内容详解

1. 绝对导入与相对导入

1.1 导入

  1. 只要涉及到模块的导入,那么sys.path 永远以执行文件为准

1.2 代码推导

  1. 模块之间可以导其他模块
    image
  2. 任何模块中,只要涉及到模块的导入,那么查找路径都是按照执行文件为准
    image
  3. 绝对导入
    image
  4. 多层文件导入
    image
  5. 相对导入
    image

1.3 绝对导入

  1. 以执行文件所在的sys.path为起始路劲 往下一层层查找
# 如
from ccc import b
from ccc.ddd.eee import b
  1. 由于phcharm会自动将项目根目录添加到sys.path中所以查找模块肯定不报错的方法就是永远从根路劲往下一层层找
  2. 如果不是用pycharm运行,则需要将项目跟目录添加到sys.path(针对项目的根目录的绝对路劲有模块可以帮助我们获取:os模块)

1.4 相对导入

  1. 储备知识
    .在路径中意思是当前路经
    ..在路劲中的意思是上一层路经
    ../..在路劲中意思是上上一层路径
  2. 相对导入可以不参考执行文件所在的路径,直接以当前模块文件路径为准
    只能在模块文件中使用,不能在执行文件中使用
    相对导入在项目比较复杂的情况下可能会出错
  3. 相对导入尽量少用,推荐使用绝对导入

2. 包的概念

2.1 如何理解包

  1. 专业的角度:内部含有__init__.py的文件夹
  2. 直观的角度:就是一个文件夹

2.2 包的作用

  1. 内部存放多个py文件(模块文件) 仅仅是为了2更加方便的管理模块

2.3 具体使用

  1. import 包名
  2. 导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么)
  3. 也可以跨过__init__.py直接导入包里面的模块文件
  4. 针对python3解释器,其实文件夹里面有没有__init__.py已经无所谓了,都是包
  5. 针对python2解释器,文件夹下面必须有__init__.py才能被当做包

3. 编程思想的转变

3.1 小白阶段

  1. 按照需求从上往下堆叠代码(面条版) 单文件模式
  2. 相当于将所有的文件全部存储在C盘并且不分类

3.2 函数阶段

  1. 将代码按照功能的不同封装成不同的函数 单文件模式
  2. 相当于将所有文件在C盘下分类存储

3.3 模块阶段

  1. 根据功能的不同拆分不同的模块文件 多文件模式
  2. 相当于将所有的文件按照功能的不同分别分类到不同的盘中,目的为了更加方便快捷高效的管理资源
  3. 分模块文件多了之后还需要有文件夹

4. 软件开发目录规范

  1. 我们所使用的所有程序目录都有一定的规范,有多个文件夹
    image

4.1 bin文件夹

  1. 用于存储程序的启动文件 start.py

4.2 conf文件夹

  1. 用于存储程序的配置文件 settings.py

4.3 core文件夹

  1. 用于存储程序的核心逻辑 src.py

4.4 lib文件夹

  1. 用于存储程序的公共功能 common.py

4.5 db文件夹

  1. 用于存储程序的数据文件 userinfo.txt

4.6 log文件夹

  1. 用于存储程序的日志文件 log.log

4.7 interface文件夹

  1. 用于存储程序的接口文件 user.py order.py goods.py

4.8 readme文件(文本文件)

  1. 用于编写程序的说明,介绍,广告,类似于产品说明书

4.9 requirements.txt文件

  1. 用于存储程序所需的第三方模块名称和版本

4.10 总结

  1. 编写软件的时候 可以不完全遵循上面的文件名
  2. start.py可以放在bin文件夹下也可以直接放在项目根目录
  3. db文件夹等我们学到真正的项目会被数据库替代
  4. log文件夹等我们学到真正的项目会被专门的日志服务替代

5. 常见内置模块

5.1 collections模块

  1. 在内置数据类型(dict,list,set,tuple)的基础上,collections模块还提供几个额外的数据类型:Counter,deque,defaultdict,namedtuple,OrderdDict等
  2. namedtuple 生成可以使用名字来访问元素内容的tuple,二维坐标系和三维坐标系
from collections import namedtuple
Point = namedtuple('二维坐标系',['x','y'])
res1 = Point(1,2)
res2 = Point(3,4)
print(res1, res2)
print(res1.x)
print(res2.y)

image

from collections import namedtuple
Point = namedtuple('三维坐标系','x y z')
res1 = Point(1,2,3)
res2 = Point(3,4,5)
print(res1, res2)
print(res1.x)
print(res2.y)
print(res2.z)

image
3. deque 高效实现插入和删除操作的双向列表,适合用于队列和栈

from collections import deque
q = deque()
q.append(11)
q.append(22)
q.append(33)
q.appendleft(44)
print(q)

image
4. OrderedDict 有序字典,Key会按照插入的顺序排列,不是Key本身排序

from collections import OrderedDict
a = dict([('a', 1), ('b', 2), ('c', 3)])
b = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(b)

image
5. Counter 目的是用来跟踪值出现的次数

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)

image

5.2 时间模块

  1. 表示时间的三种格式
    时间戳,结构化时间,格式化时间
  2. 时间戳 timetime() 时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
import time
print(time.time())  # 1657791294.936325
  1. 结构化时间 time.gmtime()
import time
# print(time.time())  # 1657791294.936325
print(time.gmtime())  # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=59, tm_sec=19, tm_wday=3, tm_yday=195, tm_isdst=0)
  1. 格式化时间 time.strftime() %Y-%m-%d %H-%M-%S
import time
# print(time.time())  # 1657791294.936325
# print(time.gmtime())
print(time.strftime('%Y-%m-%d %H-%M-%S'))  # 2022-07-14 19-00-56
  1. 转换
    image
  2. 图表
    image

标签:24,文件,软件开发,python,导入,文件夹,模块,time,print
来源: https://www.cnblogs.com/cainiaozhy/p/16478665.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有