一、绝对导入和相对导入
1.绝对导入
- 1> 什么是。绝对导入?
- 依据执行文件的sys.path中的根目录,一层层往下查找
- 由于pycharm会把项目根目录自动添加到sys.path中去,所以依据项目根目录一层层向下查找是绝对不会出错的
- 如果不是在pycharm中运行代码,则需要手动将根目录添加到sys.path中去(后期有os模块帮我们自动添加)
- 2> 代码实现:
from a.b.c import d.py
2.相对导入
- 1> ’ . ’ 的不同含义
- . 一个点:意思是当前路径
- … 两个点:意思是上一层路径
- …/… 意思是上上一层路径
- 2> 什么是相对导入?
- 以当前模块的路径为准,与执行文件的路径无关
- 3> 特点
- 相对导入只能在模块中使用
- 相对导入在项目比较复杂的情况下可能会出错
3.总结
综上所述,更推荐使用绝对导入
二、包
-
1.什么是包?
-
2.包的功能?
-
3.在模块导入的功能上包和普通的文件夹有啥区别?
- 1> 包:执行文件只能够调用包中__ init__.py文件中有的名字,所以需要自己手动将自定义模块名导入到init文件中去,但是也可以通过绝代查找的方式跳过 init文件,直接把自定义模块导入执行文件
- 2> 文件夹:可以通过绝对导入的方式包自定义模块导入执行文件
-
4.导入语法
import package1
三、编程思想的转变
- 阶段1:小白阶段:过程式编程思维,每天写面条版代码
- 阶段2:函数阶段:学会的用函数封装各种功能
- 阶段3:模块阶段:根据不同的功能将代码拆分到各个模块中去,便于管理和调用
四、软件开发目录规范
- bin文件夹:存放启动文件start.py (start.py文件也可以直接放到项目根目录下,这样的话系统会自动添加路径)
- conf文件夹:存放配置文件settings.py
- core文件夹:存放核心代码文件src.py
- db文件夹:数据库文件,存放程序所需要调用的数据文件 (后期db文件夹会被数据库取代)
- log文件夹:存放日志文件,具有记录的功能 (后期项目中log文件夹会被专门的日志服务替代)
- lib文件夹:用于存放程序的公共功能common.py
- interface文件夹:用于存放程序的接口文件
- requirements文件夹:存放第三方模块名称和版本
- readme文本文件:说明程序的功能和一些相关的资料
五、常见的内置模块
-
1.collections模块
-
功能:给我们提供了更多的数据类型 -
常用的方法 -
1> nametuple:创建一个命名元组子类的工厂函数 -
代码实现 -
from collections import namedtuple
point = namedtuple('三维坐标', ['x', 'y', 'z'])
point = namedtuple('三维坐标', 'x y z')
res1 = point(1, 2, 3)
print(res1)
print(res1.x)
print(res1.y)
print(res1.z)
-
实际应用 -
p = namedtuple('扑克', ['花色', '点数'])
res1 = p('红桃', 'K')
res2 = p('黑方', '5')
print(res1)
print(res2)
-
2> deque:双端队列,可以实现两端快速添加(append)和弹出(pop)数据 -
代码实现 -
from collections import deque
q = deque()
q.append(111)
q.append(222)
q.append(333)
q.append(444)
q.append(555)
q.append(666)
print(q)
q.appendleft(777)
print(q)
q.pop()
print(q)
q.popleft()
print(q)
-
3> OrderedDict : 有序词典 -
代码实现 -
from collections import OrderedDict
d = OrderedDict(a=1, b=2, c=3, d=4, e=5)
print(d)
-
4> Counter : 计数功能 -
res1 = 'aaablbblbisllssaa'
from collections import Counter
res1 = Counter(res1)
print(res1)
-
2.time模块
-
1.时间戳:time.time() -
代码实现 -
import time
print(time.time())
-
2.结构化时间:time.gmtime() -
代码实现 -
import time
print(time.gmtime())
-
3.格式化时间strftime(‘%Y-%m-%d %X’) -
代码实现 -
import time
print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %H-%M-%S'))
-
4.不同时间格式之间的相互转换
-
1> 时间戳和结构化时间之间的相互转换 import time
a = time.time()
b = time.gmtime()
print(time.gmtime(a))
print(time.mktime(b))
-
2> 格式化时间和结构化时间之间的相互转换 -
import time
b = time.gmtime()
c = time.strftime('%Y-%m-%d %H-%M-%S')
print(time.strptime(c, '%Y-%m-%d %H-%M-%S'))
print(time.strftime('%Y_%m_%d %H_%M_%S', b))
-
3> 图示
|