常用内置模块之collections模块、时间模块、随机数random模块
今日内容回顾
- 报的具体使用
- 编程思想的转变
- 软件开发目录规范
- 常用内置模块之collection模块
- 常用内置模块之时间模块
- 常用内置模块之随机数模块
包的具体使用
1.在python2看看是否有_init_.py文件夹内没有的话python2不认为是或者模块包 而在python3则没有这么多规则,只有py文件有功能代码就是模块
# 如果只想用包中某几个模块 还是按照之前的导入方式 from aaa import md1, md2
# 如果直接导包名 import aa
导入包其实就是导下面的__init__.py文件 该文件内有什么名字就可以通过包名点什么名字
编程思想的转变
1.面条版阶段
所有的代码全部堆叠到一起
'''
第一个阶段可以看成是直接将所有的数据放在C盘
视频 音频 文本 图片
'''
2.函数版阶段
根据功能的不同封装不同的函数
'''
第二个阶段可以看成是将C盘下面的数据分类管理
视频文件夹 音频文件夹 文本文件夹 图片文件夹
'''
3.模块版阶段
根据功能的不同拆分成不同的py文件
'''
第三个阶段可以看成将C盘下的数据根据功能的不同划分到更合适的位置
系统文件夹 C盘
视频文件夹 D盘
图片文件夹 E盘
类似于开公司目的是为了资源的高效管理
'''
软件开发目录规范
1.文件及目录的名字可以变换 但是思想是不变的 分类管理
2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类
'''
myproject项目文件夹
1.bin文件夹>>> 主要存放项目启动文件
start.py 启动文件可放在bin目录下 也可以直接在项目根目录
2.conf文件夹>>> 主要存放项目配置文件
settings.py 里面存放项目的默认配置 一般是全大写
3.core文件夹>>> 主要存放项目的核心文件
src.py 里面存放项目的核心功能
4.interface文件夹>>> 主要存放项目接口文件
goods.py 根据具体业务逻辑划分对应的文件
user.py
account.py
5.db文件夹>>> 主要存放项目相关数据
userinfo.txt
db_handler.py 存放数据库操作相关的代码
6.log文件夹>>> 主要存放项目日志文件
log.log
7.lib文件夹>>> 主要存放公共功能
common.py
8.readme文件>>> 主要存放项目相关说明
9.requirements.txt文件>>> 主要存放项目所需模块及版本
'''
常用内置模块之collections模块
# 在内置数据类型(dict、list、set、tuple)的基础上 collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
1.具名元组:namedtuple 生成可以使用名字来访问元素内容的tuple
tuple是元组可以表示不变的集合
如:一个点的二维坐标可以表示 p = (2, 3) 而若就看到(2, 3)很难表示出一个坐标
# 这时 namedtuple 表示二维坐标系
from collection import nametuple
point = namedtuple('点', ['x', 'y'])
生成点的信息
p1 = point(2, 4)
print(p1) # 点(x=2, y=4)
print(p1.x) # 2
print(p1.y) # 4
2.双端队列:deque 可以快速的从另外一侧追加和推出对象
list列表在存储数据式按索引访问数据值很快 但做插入和删除数据值就很慢 因为 list 是线性存储数据 当数据量大的时候 插入和删除效率就很低
# 这时 deque 实现高效插入操作和删除操作的列表 适用于队列和堆栈
deque 除了实现list的append()和pop()外
from collection import deque
q = deque(['a', 'b', 'c', 'd', 'e', 'f'])
q.append('g')
q.appendleft('z')
print(q) # deque(['z', 'a', 'b', 'c', 'd', 'e', 'f', 'g'])
3.有序字典:OrderedDict
使用dict字典时 键是无序的 做迭代时无法确定键的顺序
# 这时 OrderedDict 可以保持key的顺序
from collection import OrderedDict
l1 = {'a': 1, 'b': 2, 'c': 3}
dic = OrderedDict(l1)
print(dic) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(dic.keys()) # odict_keys(['a', 'b', 'c'])
di = OrderedDict()
di['z'] = 99
di['p'] = 66
di['f'] = 88
print(di) # OrderedDict([('z', 99), ('p', 66), ('f', 88)])
print(di.keys()) # odict_keys(['z', 'p', 'f']) key是有序的
4.带有默认值的字典:defaultdict
有如集合 [11,22,33,44,55,66,77,88,99,90]将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中 即: {'k1': 大于66 , 'k2': 小于66}
传统做法:
values = [11, 22, 33,44,55,66,77,88,99,90]
# my_dict = {'k1': [], 'k2': []}
my_dict = dict([('k1', []), ('k2', [])])
for value in values:
if value < 66:
my_dict.get('k1').append(value)
else:
my_dict.get('k2').append(value)
print(my_dict) # {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99, 90]}
# 这时 defaultdict
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value > 66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict)
常用内置模块之时间模块
1.import time
"""
三种时间表现形式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的 人看不适应
3.格式化时间
主要是给人看的
"""
import time
# 时间戳
print(time.time()) # 1666173355.9952471
# 时间字符串 strftime
print(time.strftime('%Y-%m-%d %H-%M-%S')) # 2022-10-19 17-56-38
print(time.strftime('%Y/%m/%d %H:%M:%S')) # 2022/10/19 17:59:33
print(time.strftime('%Y-%m-%d %X')) # 2022-10-19 17:56:18
# 时间元组:localtime将一个时间戳转换为当前时区的struct_time
print(time.localtime()) # print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=11, tm_min=32, tm_sec=50, tm_wday=2, tm_yday=292, tm_isdst=0)
# 让程序原地阻塞指定的秒数
time.sleep(100)
2.import datetime
import datetime
print(datetime.datetime.now()) # 2022-10-19 18:08:13.680085
print(datetime.datetime.today()) # 2022-10-19 18:08:13.682081
print(datetime.date.today()) # 2022-10-19
'''
datetime: 年月日 时分秒
date: 年月日
time: 时分秒(后续会有此规律)
'''
from datetime import date, datetime
print(date.today()) # 2022-10-19
print(datetime.today()) # 2022-10-19 18:16:32.311378
print(datetime.utcnow()) # 2022-10-19 10:16:32.311377
import datetime
c = datetime.datetime(2099, 10, 23, 12, 20)
print('指定日期:', c) # 指定日期: 2099-10-23 12:20:00
from datetime import datetime
# 不规则的时间表示形式转换为标准的时间格式 strptime
a = datetime.strptime('2022/10/15', '%Y/%m/%d')
print(a) # 2017-09-30 00:00:00
b = datetime.strptime('2022年10月22日星期六', '%Y年%m月%d日星期六')
print(b) # 2022-10-22 00:00:00
c = datetime.strptime('2022年10月18日星期六22时50分20秒','%Y年%m月%d日星期六%H时%M分%S秒')
print(c) # 2022-10-18 22:50:20
# 时间差值 做定时任务
import datetime
a = datetime.date.today()
print(a) # 2022-10-19
b = datetime.timedelta(days=6) # 设置一个时间差6天
# (days可以是seconds秒数也可以是minutes分钟\hours小时\weeks星期)
print(a + b) # 2022-10-25 # 6天之后
e = datetime.datetime.today()
print(e) # 2022-10-19 18:33:42.648731
f = datetime.timedelta(minutes=30) # 设置时间差30分钟后
print(e + f) # 2022-10-19 19:03:42.648731
常用内置模块之随机数random模块
import random
print(random.random()) # 随机产生0到1之间的小数
print(random.randint(1, 10)) # 随机产生1到10之间的整数
print(random.randrange(1, 100, 2)) # 随机产生1到100之间的奇数
print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本 '二等奖'
print(random.choices(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本 ['二等奖']
print(random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 3)) # 随机抽指定个数的 ['tom', 'jerry']
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
random.shuffle(l1) # 随机打乱数据集
print(l1)
'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字 4位'''
def get_code(n):
code = ''
for i in range(n):
# 1.先产生随机的大写字母 小写字母 数字
random_upper = chr(random.randint(65, 90)) # 随机产生A到Z之间的字母
random_lower = chr(random.randint(97, 122)) # 随机产生a到z之间的字母
random_int = str(random.randint(0, 9)) # 随机产生0到9的数字转化成字符串才能拼接
# 2.随机三选一
temp = random.choice([random_upper, random_lower, random_int])
code += temp
return code
re = get_code(3)
print(re)
res = get_code(4)
print(res)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!