IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Day23——绝对和相对导入,包,软件开发目录规范,常见内置模块 -> 正文阅读

[Python知识库]Day23——绝对和相对导入,包,软件开发目录规范,常见内置模块

今日内容

目录

  • 绝对导入与相对导入

  • 包的概念

  • 编程思想的转变

  • 软件开发目录规范

  • 常见内置模块

绝对导入与相对导入

只要有模块的导入,那么sys.path一定是以执行文件为主

  • 绝对导入

    其实就是以执行文件的sys.path为主,然后一层层往下找
    eg:
    	from core import src
    如果有多层的话,可以通过点查找。
    eg:
    	from aaa.bbb.ccc import d
    

    绝对导入的利弊:

    1.绝对导入是首选,因为它们非常明确和直接。仅仅通过查看语句就可以很容易地确定导入资源的位置,此外,即使导入语句的当前位置发生更改,绝对导入仍然有效。事实上,PEP 8明确建议绝对导入。
    2.有时绝对导入会变得相当冗长,这取决于目录结构的复杂性。这个时候可以考虑相对路径

    如果我们想肯定不报错的话,就是永远从根目录开始往下一层层查找
    如果不是pycharm的话,就需要我们自动将项目根目录加到sys.path下面

  • 相对导入

    from . import b
    . 表示当前路径
    .. 表示上一级路径
    ../.. 表示上两级路径
    

    相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准

    相对导入的利弊

    1.相对导入的一个明显优势是它们相当简练。根据当前位置,它们可以将你之前看到的冗长的可笑的导入语句转换为简单的语句。
    2.只能在模块文件中使用 不能在执行文件中使用,相对导入在项目比较复杂的情况下 可能会出错

    推荐使用绝对导入,少用相对导入

包的概念

思考

  • 如何理解包?

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

  • 包的作用

    内部存放多个py文件(模块文件)  仅仅是为了更加方便的管理模块文件
    
  • 包的具体使用

    import 包名
    

    导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么)
    其实也可以跨过__init__.py直接导入包里面的模块文件

eg:
在这里插入图片描述

from bao import name
print(name)  # 是找__init__里面的

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

编程思想的转变

1.基础阶段(单文件)

此阶段写代码就是在一个文件内不停地堆叠代码的行数(面条版本)

2.函数阶段(单文件)

此阶段写代码我们学会了将一些特定功能的代码封装到函数中供后续反复调用

3.模块阶段(多文件)

此阶段不单是将功能代码封装成函数,并且将相似的代码功能拆分到不同的py文件中便于后续的管理

小白阶段相当于将所有的文件全部存储在C盘并且不分类
函数阶段相当于将所有的文件在C盘下分类存储
模块阶段相当于将所有的文件按照功能的不同分门别类到不同的盘中
目的为了更加方便快捷高效的管理资源

软件目录开发规范

我们在以后的工作中,一个项目是由很多的文件和文件夹组成的,而且这些文件都各种有各自的意义和作用

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

总结

1.目录的名字可以不一致,但是大致的意思要相近
2.主要作用是为了方便管理,解耦合

常见的内置模块

  • collections模块

    这个模块为我们提供了很多数据类型
    

我们可以通过CTRL+右键点击collections,我们可以看到它具备的一些功能

__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
            'UserString', 'Counter', 'OrderedDict', 'ChainMap']
名称功能
namedtuple生成可以使用名字来访问元素内容的元组(tuple)
deque双端队列,可以快速的从另外一侧追加和推出对象
Counter计数器,主要用来计数
OrderedDict有序字典
defaultdict带有默认值的字典

eg:

namedtuple

from collections import namedtuple  # 导入模块
Point = namedtuple('三维坐标系', ['x', 'y', 'z'])
res1 = Point(1, 3, 6)
res2 = Point(10, 49, 66)
print(res1, res2)  # 三维坐标系(x=1, y=3, z=6) 三维坐标系(x=10, y=49, z=66)
print(res1.x)  # 1
print(res1.y)  # 3
from collections import namedtuple  # 导入模块
Point = namedtuple('扑克牌', ['花色', '点数'])
res1 = Point('?', '2')
res2 = Point('?', 'A')
print(res1, res2)  # 扑克牌(花色='?', 点数='2') 扑克牌(花色='?', 点数='A')

eg:

deque

from collections import deque  # 导入模块
q = deque()
q.append(111)  # 添加数据
q.append(222)
q.append(333)
q.append(444)
q.appendleft(555)  # 在队列的左边添加数据
print(q)  # deque([555, 111, 222, 333, 444])

eg:

OrderedDict

输出有序的字典,本来字典是无序的

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

defaultdict

简介:

默认字典,是内置数据类型dict的一个子类,基本功能与dict一样,只是重写了一个方法missing(key)和
增加了一个可写的对象变量default_factory

语法结构

collections.defaultdict([default_factory[, …]])

eg:

from collections import defaultdict
res = defaultdict(k1=[],k2=[])
print(res)  # defaultdict(None, {'k1': [], 'k2': []})

Counter

简介:

计数器,可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。

eg:

from collections import Counter
res = 'abcdeabcdabcaba'
res1 = Counter(res)
print(res1)  # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
  • 时间模块之time模块

    和时间有关系的我们就要用到时间模块。在使用模块之前,应该首先导入这个模块。
    

常用方法

1.time.sleep(secs)

(线程)推迟指定的时间运行。单位为秒。

2.time.time()

获取当前时间戳

时间的三种格式

1.时间戳(timestamp):

通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

2.格式化的时间字符串(Format String):

eg: ‘2022-7-14’

3.元组(struct_time) :

元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

time.gmtime() 以元组方式返回格林威治时间

三种格式之间的转换
在这里插入图片描述

eg:

import time

print(time.strftime("%Y-%m-%d %X"))  # 2022-07-14 20:22:27  # 格式化时间
print(time.strftime("%Y-%m-%d %H-%M-%S"))  # 2022-07-14 20-54-45
import time

print(time.strptime('2022-07-14 20:22:27', "%Y-%m-%d %H:%M:%S"))  
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=20, tm_min=22, tm_sec=27, tm_wday=3, tm_yday=195, tm_isdst=-1)
import time

print(time.gmtime())  # 结构化时间
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=12, tm_min=28, tm_sec=46, tm_wday=3, tm_yday=195, tm_isdst=0)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:19:02  更:2022-07-17 16:23:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:44:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码