python基础18 模块2

232 阅读4分钟

绝对导入与相对导入

绝对导入 aaa.bbb.ccc

  • 从执行文件所在的sys.path一层层往下查找
  • 找不到报错,要在sys.path下添加根目录,然后在根目录往下一层一层找
from  aaa.bbb.ccc improt  模块名/名字

相对导入 . .. ../..

  • 只能在模块文件里面使用
.        当前路径
..       上一级路径
../..    上上级路径
  • 一般不推荐使用相对导入,推荐绝对导入,不易出错

编程思想简介s

  • 主要有四个阶段的转换
    • 小白阶段
    该阶段的时候我们写的代码时一条直线,执行是也是,如同面条一般,
    并且所有代码都在一个文件里
    
    • 函数阶段
    该阶段我们已经会把代码封装为函数了,代码执行顺序不再是从上往下顺着执行了,
    略微有所改变,但是代码还是都在一个文件中。
    
    • 模块阶段
    我们已经就将代码写到了多个文件里。使用时根据功能拆封为不同模块,
    导入不同模块,然后由多个文件协同完成。
    分类到不同的文件夹下是为了更好的管理资源
    
    • 面向对象阶段
    暂时还没学到
    

包的介绍

  • 包的作用
    • 为了管理模块放在文件夹中的模块
  • 用法
import 包名
  • 导入包名其实就是导入了包里的__init__.py,包里有什么就能用什么,但是也可以跳过直接导入模块文件不导包

不同python环境包的差异

  • 1.在python2中,含有__init__.py的文件夹才可以被当作包
  • 2.在python3中,即使文件夹中没有__init__.py,也会被默认为包。

软件开发目录规范

  • 在模块文件多了,开发的程序的所有的程序目录都要有规范
bin文件夹              存储文件的启动文件           start.py
 
conf文件夹             用于存储程序的配置文件       settings.py

lib文件夹              用于存储程序的公共能力       common.py
       
core文件夹             用于存储程序的和兴逻辑       src.py

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

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

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

readme                用于编写程序的说明,介绍,广告,产品说明书

requirements.txt      用于存储程序所需的第三方模块名称和版本
  • 编写软件时可以不完全遵守这个文件名
    • bin文件下的start.py文件也能直接放到项目的根目录
    • db文件夹后期项目会被数据库软件代替
    • log文件夹后续也会被专门的日志服务代替

常见内置模块

collections模块

1.具名元组 namedtuple

from collections import namedtuple
Point = namedtuple('二维坐标系', ['x', 'y'])  # 写入两个实参,第二个实参用列表表示里面的元素
res1 = Point(6, 8)
res2 = Point(1, 3)
print(res1, res2)    # 用逗号隔开变量名,两个变量名对应的坐标系坐标都会被打印出来
print(res1.x)        # 变量名,句点符加上参数x就是x轴的坐标
print(res1.y)        # 变量名,句点符加上参数y就是y轴的坐标
  • 输出结果: image.png
from collections import namedtuple
Point = namedtuple('三维坐标系', ['x', 'y', 'z'])
res1 = Point(1, 2, 3)
print(res1)          # 直接输出变量名绑定的关系,三维坐标系的坐标会被打印
print(res1.z)        # 变量名,句点符加上参数z就是z轴的坐标
  • 输出结果:
    image.png
from collections import namedtuple
p = namedtuple('扑克牌',  ['花色', '点数'])
res1 = p('♦', 'K')
res2 = p('♣', '3')
print(res1)
print(res2)          # 输出变量名就会答应扑克牌的花色和点数
  • 输出结果: image.png

2.双端队列 deque

from collections import deque
func = deque()
func.append(1)        # 右侧添加数据值1写入列表
func.append(2)
func.append(3)
func.appendleft(4)    # 左侧(开头添加数据值4)
print(func)
  • 输出结果: image.png

3.有序字典 OrderedDict

from collections import OrderedDict
func = dict([('tom', 1), ('jack', 2)])
print(func)
  • 输出结果: image.png

4.默认值字典 defaultdict

# 有集合 [1,4,7,13,16,18,24]
# 将所有大于13值保存到字典的的第一个key里,大于13的保存到第二个key里
# {'k1':[], 'k2':[]}

from collections import defaultdict
res = defaultdict(k1=[],k2=[])
print(res)
  • 输出结果:
    image.png

5.简单的计算器 Counter

l = '12432412314623462341345234232131425124'
from collections import Counter
l1 = Counter(l)
print(l1)
  • 输出结果:与for循环相同 image.png

时间模块之time

时间的三种格式

  • 1.时间戳 time.time()
  • 2.结构化时间 time.gmtime()
  • 3.格式化时间 time.strftime()

image.png