Python基础之模块:2、包的使用和软件开发目录规范及常用内置模块
一、包的使用
1、什么是包
- 指含有多个py文件的集合
- 指内部含有__ init__ .py文件的文件的文件夹
- 在py3中,即使没有init.py的文件,也能识别出是包
2、包的具体使用
引言:
虽然在py3中文件夹内没有含有__ init __ .py也可以识别,但是考虑到兼容性的问题,建议还是在文件夹中加上 __ init __ .py
1、常规导入
- 如果只是想使用包中某几个模块,只需按照常规from...import...的导入方式使用即可
2、直接导入包名
使用import的方式直接导入包名
代码表现:
import 包名
这种方式导入的是包内__ init __ .py文件,通常包的开发人员会将包内模块名导入到这个文件中去,我们只需要通过’包‘点_'_ init __'点''模块名''的方式调用
二、编程思想转变
引言:
在前面学习python过程中我们所写的代码都是在一个py文件中,再往后的日程里,我们将以新的方式来编写代码,通过将不同文件类型区分开来,划分出不同的文件夹,来往正式的程序开发中迈进
1、面条阶段
- 所有代码在一个py文件中,叠放在一起
2、函数阶段
- 根据功能的不同,封装不同的函数
3、模块阶段
- 根据功能的不同来拆分成不同的py文件
三、软件目录开发规范
引言:
为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录,做到可读性强,可维护性高
1、bin
- bin 主要用来存放项目启动文件
- start.py 启动文件可以存放在这个文件夹内,也可以直接存放在项目根目录下
2、conf
- conf 主要用来存放项目配置文件
- settings.py 存放项目的默认配置,这里的文件一般全是大写
3、core
- core 主要用来存放项目的核心功能文件
- src.py 项目核心功能文件
4、interface
- interface 主要用来存放项目接口类文件,根据具体业务逻辑划分文件
- goods、user、account 等文件
5、db
- db 主要用来存放数据相关的文件(用户信息、用户账号)
- userinfo、db_handler 等文件
6、log
- log 主要用来存放项目日志类型文件(项目运行情况)
- log.log
7、lib
- lib 主要用来存放项目公共功能等文件
- common.py
8、readme
- readme 主要用来存放项目的使用说明和一些介绍
9、requirements
- requirements 主要用来存放项目所需的模块和版本
四、常用内置模块
1、collections模块
1.具名元组
关键词:
namedtuple(可迭代对象,导入的序列)
作用:
可生成具体名称元组
代码用法:
导入模块:
from collections import namedtuply
用法一:表示二位坐标
point = namedtuple('坐标', ['x', 'y'])
p1 = point(1, 2)
print(p1)
print(p1.x)
print(p1.y)
-------------------------------------------------------------------------------------
坐标(x=1, y=2)
1
2
用法二:表示扑克牌
card = namedtuple('扑克牌', ['num', 'color'])
c1 = card('A', '黑')
c2 = card('A', '红')
print(c1, c1.num, c1.color)
print(c2, c2.num, c2.color)
-----------------------------------------------------------------------------
扑克牌(num='A', color='黑') A 黑
扑克牌(num='A', color='红') A 红
2.双端队列
关键词:
deque(可迭代对象,最大数据值)
作用:
可生成双向列表,返回一个新的双向队列对象,从左到右初始化(用方法 append()) ,从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。
代码用法:
导入模块:
from eollections import deque
用法:
q = deque(['a', 'b', 'c'], maxlen=10)
# 从右边添加一个元素
q.append('d')
print(q) # deque(['a', 'b', 'c', 'd'], maxlen=10)
# 从左边删除一个元素
print(q.popleft()) # a
print(q) # deque(['b', 'c', 'd'], maxlen=10)
# 扩展队列
q.extend(['i', 'j'])
print(q) # deque(['b', 'c', 'd', 'i', 'j'], maxlen=10)
# 查找下标
print(q.index('c')) # 1
# 移除第一个'd'
q.remove('d')
print(q) # deque(['b', 'c', 'i', 'j'], maxlen=10)
# 逆序
q.reverse()
print(q) # deque(['j', 'i', 'c', 'b'], maxlen=10)
# 最大长度
print(q.maxlen) # 10
3.默认值字典
关键词:
defaultdict
作用:
默认字典的功能与dict基本相同,但在访问一个不存在的key时,默认字典会提供一个默认值,而不是引发异常
代码用法:
导入模块:
from eollections import defauldict
用法一:
# 使用 list 作为 default_factory ,很容易将序列作为键值对加入字典:
d = defaultdict(list)
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
for k, v in s:
d[k].append(v)
print(d) # defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
用法二:
# 设置 default_factory 为 int ,可以很好的用于计数
s = 'mississippi'
d = defaultdict(int)
for k in s:
d[k] += 1
print(d) # defaultdict(<class 'int'>, {'m': 1, 'i': 4, 's': 4, 'p': 2})
4.计数
关键词:
Counter
作用:
Counter 是一个 dict 的子类,用于计数可哈希对象。
代码用法:
导入模块:
from eollections import counter
用法一:统计字符串字符个数
c = Counter()
str_1 = 'sfsadfsdjklgsdla'
for i in str_1:
c[i] += 1
print(c) # Counter({'s': 4, 'd': 3, 'f': 2, 'a': 2, 'l': 2, 'j': 1, 'k': 1, 'g': 1})
c2 = Counter('asfjslfjsdlfjgkls')
print(c2) # Counter({'s': 4, 'd': 3, 'f': 2, 'a': 2, 'l': 2, 'j': 1, 'k': 1, 'g': 1})
用法二:统计列表相同数据值个数
c = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(c) # Counter({'blue': 3, 'red': 2, 'green': 1})
2、time时间模块
在python中,有三种表现时间的结构
1、时间戳:1970年0时0分0秒-到现在的秒速
2、结构化时间:计算机看的,人看不适应
3、格式化时间:主要是表示时间的年月日
1.时间戳
关键词:
time
作用:
打印一个时间戳
代码用法:
模块导入:
import time/from time import time
print(time.time()) # 1666170099.7668478
2.结构化时间
关键词:
localtime
作用:
打印结构化时间
代码用法:
模块导入:
import time/from time import localtime
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=4, tm_sec=16, tm_wday=2, tm_yday=292, tm_isdst=0)
3.格式化时间
关键词:
strftime
作用:
以人能看懂的方式打印时间
需要设置关键字打印相对的时间:
年 | 月 | 日 | 时 | 分 | 秒 | |
---|---|---|---|---|---|---|
关键词 | y | m | d | H | M | S |
对应单词 | year | month | day | hour | minute | sec |
代码用法:
模块导入:
import time/from time import strftime
print(time.strftime('%y/%m/%d')) # 22/10/19
print(time.strftime('%y-%m-%d,%H:%M:%S')) # 22-10-19,17:19:17
print(time.strftime('%y年%m月%d日%H时%M分%S秒')) # 22年10月19日17时19分17秒
4.睡眠
关键词:
sleep
作用:
代码执行到此处时,可以设置暂停执行的时间
代码用法:
模块导入:
import time/from time import sleep
time.sleep(10)
print('怎么还没到我~') # 代码将在10秒后打印
5.datetime类
代码用法:
导入模块:
import datetime
print(datetime.datetime.today()) # 2022-10-19 18:22:06.371652
print(datetime.datetime.now()) # 2022-10-19 18:24:13.345563
print(datetime.date.today()) # 2022-10-19
3、随机模块
1.随机产生小数
关键词:
random
作用:
随机产生一串小数
代码用法:
导入模块:
import random
print(random.random) # 0.927037923859868
2.随机产生整数
关键词:
randint
作用:
随机产生整数,可设置区间
代码用法:
导入模块:
import random
print(random.randint(1,10)) # 89
3.随机产生整数
关键词:
randrange
作用:
随机产生整数,可设置区间,步长
代码用法:
导入模块:
import random
print(random.randint(1,10,5)) # 25
5.随机抽取样本
关键词:
choice
作用:
在数据库中随机抽取一个样本
代码用法:
导入模块:
import random
l1 = [5, 7, 9, 12, 15]
print(random.choices(l1)) # 5 返回数据值本身
print(random.choices(l1)) # [5] 以数据的原本类型返回
6.随机抽取多个样本
关键词:
sample
作用:
在数据库中随机抽取多个样本,可指定数量
代码用法:
导入模块:
import random
l1 = [5, 7, 9, 12, 15]
print(random.sample(l1, 3)) # [5, 7, 12]
补充:面试题
随机生成四位含有大小写英文和数字的验证码
import random
def get_code(n):
code = ''
for i in range(n):
upper_ = (chr(random.randint(65.90)))
lower_ = (chr(random.randint(97,122)))
random_int = str(random.randint(0,9))
temp = random.choice([upper_, lower_, random_int])
code += temp
return code
res = get_code(4)
print(code)
----------------------------------------------------------------------
zd6K
Python基础之模块:2、包的使用和软件开发目录规范及常用内置模块的更多相关文章
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- python基础语法10 函数递归,模块,软件开发目录规范
函数递归: 函数递归指的是重复 “直接调用或间接调用” 函数本身, 这是一种函数嵌套调用的表现形式. 直接调用: 指的是在函数内置,直接调用函数本身. 间接调用: 两个函数之间相互调用间接造成递归. ...
- python模块导入-软件开发目录规范-01
模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...
- py 包和模块,软件开发目录规范
目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...
- Python模块:Re模块、附软件开发目录规范
Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ” # 默认匹配除 ...
- python 之 软件开发目录规范 、logging模块
6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序 core src.py,程序核心功能代码 conf settings. ...
- Python 浅谈编程规范和软件开发目录规范的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...
- python浅谈编程规范和软件开发目录规范的重要性
前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...
- Python记录13:软件开发目录规范
软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...
随机推荐
- 2-2 selenium IDE自动化实战
Selenium IDE 自动化实战 任务1: 自动在百度搜索"我要自学网" 然后在搜索结果页面点击进入自学网主页 任务2 实现自学网自动登录个人账号 Test2017 12345 ...
- 【JAVA】学习路径35-InputStream使用例子
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; pu ...
- WebGPU实现Ray Packet
大家好~本文在如何用WebGPU流畅渲染百万级2D物体?基础上进行优化,使用WebGPU实现了Ray Packet,也就是将8*8=64条射线作为一个Packet一起去访问BVH的节点.这样做的好处是 ...
- django_day01
内容回顾 django处理浏览器的请求流程: 请求发送到wsgi wsgi封装了请求的相关数据(request) django去匹配路径 根据路径判断要执行哪个函数 执行函数 函数执行具体的业务逻辑 ...
- KingbaseES interval 分区表介绍
KingbaseES从V008R006C005B0041版本开始支持Oracle的Interval分区表功能. Interval分区表是一种特殊的范围分区表.当执行INSERT或者UPDATE时,若数 ...
- Pwn出题指南
0x00:背景 最近在为社团招新赛出pwn题,发现网上关于出题方面的文章资料特别少,所以打算记录下自己出题的过程,便于网友们参考学习.本次出题采用了ctf_xinetd与pwn_deploy_chro ...
- 《网页设计基础——CSS的四种引入方式详解》
网页设计基础--CSS的四种引入方式详解 一.行内式: 规则: 1. 行内式是所有样式方法中最为直接的一种,它直接对HTML的标记使用style属性,然后将CSS代码直接写在其中. 格 ...
- G&GH05 删除文件和.gitignore
注意事项与声明 平台: Windows 10 作者: JamesNULLiu 邮箱: jamesnulliu@outlook.com 博客: https://www.cnblogs.com/james ...
- Java SE 7、接口
接口 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来 语法 interface 接口名{ //属性 //方法 } class 类名 imple ...
- filebeat直接给es传输日志,自定义索引名
ElasticStack从2019年1月29日的6.6.0版本的开始,引入了索引生命周期管理的功能,新版本的Filebeat则默认的配置开启了ILM,导致索引的命名规则被ILM策略控制. 加上这个配置 ...