【2022.7.14】python基础之【模块导入路径.包.软件目录.内置模块】介绍

学习内容概要

  • 绝对导入与相对导入
  • 包的概念
  • 编程思想的转变
  • 软件开发目录规范
  • 常见内置模块 (时间模块,正则模块)

内容详细

绝对导入与相对导入

  • 1.绝对导入

​ 和之前学过的绝对路径相同 所给的信息都是准确的 精确的 绝对导入也是一样 就是以执行文件所在的位置 sys.path 为起始路径 按照顺序一层层往下找

!!!!!!!!!!!!!!!!!!!!!!!!!!!

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

!!!!!!!!!!!!!!!!!!!!!!!!!!!

提醒:由于pycharm会自动将项目根目录添加到sys.path中所以查找模块肯定不报错的方法就是永远从根路径往下一层层找

注意:如果不是用pycharm运行 则需要将项目跟目录添加到sys.path

如果发送给他人 py文件 转移到其他电脑上 该如何获取:(针对项目根目录的绝对路径有模块可以帮助我们获取>>>:os模块)

  • 2.相对导入

    && 相对导入的方法 我们首先来了解一下

    ​ . 在路径中意思是当前路径

    ​ .. 在路径中意思是上一层路径

      ../..  在路径中意思是上上一层路径
    

    注意:相对导入与绝对导入不同 相对导入 可以不参照执行文件的路径 直接以当前模块的路径为准

提醒:相对导入在项目比较复杂 文件夹很多的情况下 可能会弄混 容易出错 不建议使用

强烈建议:无脑使用绝对导入 肯定不会出错

包的概念

  • 1.如何理解包

    专业的角度:创建一个包 内部含有一个__init__.py 的文件夹

    直观的角度:就像文件夹一样 没有太大区别

  • 2.包的作用

    ​ 就像文件夹一样 内部可以存放文件 包的内部存放的是多个py文件 (模块文件) 是为了 更加方便的管理模块文件

  • 3.具体使用方式

import + 包的名字
# 导入包名实际是导入包内部的 __init__.py 文件  __init__.py 文件内有什么 才能用什么 (一般情况 都是提前把包内部的模块文件功能 都以存入__itin__中 为了方便导入)

# 也可以不通过__init__.py 文件 直接导入包里的模块文件 这样也可以

# 包在python2解释器和python3解释器中的区别解释
"""
针对python3解释器 其实文件夹里面有没有__init__.py已经无所谓了 都是包
但是针对Python2解释器 文件夹下面必须要有__init__.py才能被当做包
"""

编程思想的转变

  • 1.初始阶段

    ​ [在一个py文件中] 按需编写代码 (堆叠方式)

  • 2.函数阶段

    ​ [在一个py文件中] 可以将代码按照不同的功能 封装成不同的函数 然后整合调用

  • 3.模块阶段

    ​ [在多个py文件中] 把不同功能的模块 区分放在不同的py文件中 方便编写导入

  • 大致过程:

    初始阶段(文件全存在C盘)>>> 函数阶段(把C盘的文件分类存储)>>> 模块阶段(按照不同类型的功能 存入到不同的盘中)

    【其目是为了更加方便快捷高效的管理资源】

软件开发目录规范

文件夹名字 格式 作用
bin文件夹 start.py 用于存储程序的启动文件
conf文件夹 settings.py 用于存储程序的配置文件
core文件夹 src.py 用于存储程序的核心逻辑
lib文件夹 common.py 用于存储程序的公共功能
db文件夹 userinfo.txt 用于存储程序的数据文件
log文件夹 log.log 用于存储程序的日志文件
interface文件夹 ser.py order.py goods.py 用于存储程序的接口文件
readme文件(文本文件) specification.txt 用于编写程序的说明、介绍、广告 类似于产品说明书
requirements.txt文件 copy.txt 用于存储程序所需的第三方模块名称和版本

. 仅供参考 文件名可以根据实际情况而取名 start.py可以放在bin文件夹下也可以直接放在项目根目录

常见内置模块

1.collections 模块(给使用者提供了更多的数据类型)

# 上述的 collections 相当于一个包 里面有 __init__文件 我们就是导入__init__使用里面的名字的

from collections import namedtuple
①
point = namedtuple('二维坐标系',['x','y'])
res = point(1,3)  #  二维坐标系(x=1, y=3) 给上述式子传值
res1 = point(2,4)  #   二维坐标系(x=2, y=4
print(res,res1)  # 二维坐标系(x=1, y=3) 二维坐标系(x=2, y=4)
print(res.x)  # 通过点的方式看坐标轴 x y 的值
print(res1.y)  # 通过点的方式看坐标轴 x y 的值

from collections import namedtuple
②
Point = namedtuple('三维坐标系', 'x y z')
res1 = Point(23,45,6)
print(res1)  # 三维坐标系(x=23, y=45, z=6) 也可以传输 x y z 三个值
res2 = Point(23,34,65)
print(res2)  # 三维坐标系(x=23, y=34, z=65)
print(res1.z)  # 6
print(res1,res2)  # 三维坐标系(x=23, y=45, z=6) 三维坐标系(x=23, y=34, z=65)

from collections import namedtuple
③
n = namedtuple('扑克牌', ['花色', '点数'])
res1 = n('♥', 'A')
res2 = n('♠', 'A')
res3 = n('♦','A')
print(res1,res2,res3)  # 扑克牌(花色='♥', 点数='A') 扑克牌(花色='♠', 点数='A') 扑克牌(花色='♦', 点数='A')
  • 双端队列
from collections import deque
res = deque()
res.append(555)  # deque([555])
res.append(222)  # deque([555, 222])
res.appendleft(333)  # deque([333, 555, 222])
print(res)
"""
通过调用模块 collections 用.append和.appendleft的方式 便捷的把数据值添加到容器里(双端队列)
"""
  • 有序字典
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)])
"""
OrderedDict 有序字典的意思 字典都是无序的 导入它就可以把你的地点变成有序字典
"""
  • 默认值字典
#有如下值集合 [11,22,33,44,55,66,77,88,99,90],
# 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
情况一:
l1 = [11,22,33,44,55,66,77,88,99,90]
a = []
b = []
d = {}
for i in l1:
    if i < 66:
        a.append(i)
    else:
        b.append(i)
    d['k1'] = a
    d['k2'] = b
print(d)  # {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99, 90]}
情况二:默认值defaultdict
from collections import defaultdict
res = defaultdict(k1=[],k2=[])
for i in l1:
    if i < 66:
        res['k1'].append(i)
    else:
        res['k2'].append(i)
print(res)  # defaultdict(None, {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99, 90]})
  • 统计次数
res = 'abcdeabcdabcaba'
情况一:
new_dict = {}
for i in res:
    if i not in new_dict:
        new_dict[i] = 1
    else:
        new_dict[i] += 1
print(new_dict)  # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
情况二:
from collections import Counter
res1 = Counter(res)
print(res1)  # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

  • 时间模块
时间模块 导入方式
时间戳 time.time
结构化时间 time.gmtime()
格式化时间 time.strftime()

格式化时间调用时 括号内需要写入 字符窜 ("%Y-%m-%d %H-%M-%S")

posted @   W日常  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示