python进阶之路17 包的使用、collections、time、random模块

包
大白话: 多个py文件的集合>>>:文件夹
专业:内部含有__init__.py文件的文件夹(python2 必须要求 python3无所谓)
包的具体使用
虽然python3对包的要求降低了 不需要__init__.py也可以识别 但是为了兼容性考虑最好还是加上__init__.py
1.如果只想用包中某几个模块 那么还是按照之前的导入方式即可
from aaa import md1,md2
2.如果直接导入包名
import aaa
导入包名其实就是导包下面的__init__.py文件,该文件内有什么名字就可以通过包名点什么名字
编程思想的转变
1.面条版阶段
所有的代码全部堆叠在一起
2.函数版阶段
根据功能的不同封装不同的函数
3.模块版阶段
根据功能的不同拆分成不同的py文件
"""
第一个阶段可以看成是直接将所有的数据放在C盘
视频 音频 文本 图片
第二阶段可以看成是将C盘下的数据分类管理 视频文件夹
音频文件夹 文本文件夹 图片文件夹
第三阶段可以看成是将C盘下的数据根据功能的不同划分到更合适的位置
系统的文件夹 C盘
视频的文件夹 D盘
图片的文件夹 E盘
ps:类似于开公司(小作坊 小公司 上市公司)
为了资源的高效管理
"""
软件开发目录规范
1.文件及目录的名字可以变换 但是思想是不变的分类管理
2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类
myproject项目文件夹
1.bin文件夹 主要存放项目启动文件
start.py 启动文件可以放在bin目录下也可以直接在项目根目录下 (名字尽量见名知意)
2.conf文件夹(config) 主要存放项目配置文件
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模块
1.具名元组 namedtuple
from collections import namedtuple
# 表示二维坐标系
# point = namedtuple('点',['x','y'])
# 生成点信息
# p1 = point(1,2)
# print(p1) # 点(x=1, y=2)
# print(p1.x) # 1
# print(p1.y) # 2
card = namedtuple('扑克牌',['num','color'])
c1 = card('A','黑')
c2 = card('A','红')
print(c1,c1.num,c1.color)
print(c2,c2.num,c2.color)
2.队列
队列与堆栈
队列:先进先出
堆栈:先进后出
from collections import deque
# q = deque([1,2,3])
# print(q) # deque([1, 2, 3])
# print(q.pop()) # 3
# print(q.popleft()) # 1
"""
双端队列可以从两边任意进行数据处理
"""
from multiprocessing import Queue
q = Queue(3) # 括号内数据限制了队列只能放三个数
q.put(1)
q.put(2)
q.put(3)
q.put(4) # 第四个会卡到
print(q.get()) # 往外取数据
print(q.get())
print(q.get())
# from collections import OrderedDict # 有序字典
# od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# od['d'] = 4
# od['e'] = 5
# od['f'] = 6
# for i in od:
# print(i)
'''python3.6以后字典就是有序的了'''
# l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# # 统计 {'k1'[小于60], 'k2':[大于60]}
# 1.先定义字典数据
# num_dict = {'k1': [], 'k2': []}
# 2.for循环列表数据
# for i in l1:
# if i > 60:
# num_dict.get('k2').append(i)
# else:
# num_dict.get('k1').append(i)
# print(num_dict)
# res = 'asdasdasafddghffdhjgfjkhgkghkg'
# # 统计出现的次数
# from collections import Counter
# ret = Counter(res)
# print(ret) # Counter({'d': 5, 'g': 5, 'a': 4, 'f': 4, 'h': 4, 's': 3, 'k': 3, 'j': 2})
常见的内置模块之时间模块
import time
"""
三种时间表现形式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的 人看不适应
3.格式化时间
主要是给人看的
"""
# print(time.time()) # 1666166420.169025 获取时间戳
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=16, tm_min=5, tm_sec=46, tm_wday=2, tm_yday=292, tm_isdst=0)
当地时间 元组字符串详解

格式化时间
# print(time.strftime('%Y-%m-%d')) # 2022-10-19
# print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2022-10-19 16:02:38
# print(time.strftime('%Y-%m-%d %X')) # 2022-10-19 16:02:58
time.sleep(10) # 让程序原地阻塞指定的秒数
# import datetime
#
# print(datetime.datetime.now()) # 2022-10-19 16:11:17.476214
# print(datetime.datetime.today()) # 2022-10-19 16:11:17.476214
# print(datetime.date.today()) # 2022-10-19
'''
datetime 年月日 时分秒
date 年月日
time 时分秒(后续会有此规律)
'''
# from datetime import date, datetime
#
# print(datetime.today())
# print(date.today())
# print(datetime.utcnow()) # 格林威治时间
# import datetime
# c = datetime.datetime(2006,3,19,12,12)
# print('指定日期:',c) # 指定日期: 2006-03-19 12:12:00
# from datetime import datetime
# d = datetime.strptime('2004/9/30','%Y/%m/%d')
# print(d) # 2004-09-30 00:00:00
# e = datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
# print(e) # 2017-09-30 00:00:00 如果日期对不上则报错 比如写这一天是周五就会报错
# f = datetime.strptime('2017年9月30日星期六8时42分24秒','%Y年%m月%d日星期六%H时%M分%S秒')
# print(f) # 2017-09-30 08:42:24
# 时间差值
import datetime
ctime = datetime.date.today()
print(ctime)
time_del = datetime.timedelta(days=3) # 时间还可以按照 seconds weeks hours minutes
print(ctime+time_del)
附:三种时间转换图

import time,datetime
time.time()
# 时间戳---> 结构化时间
# time.gmtime(时间戳)
time.gmtime(time.time()) # 输出结构化时间 相当于time.localtime
# 结构化时间--->时间戳
# time.mktime(结构化时间)
time.mktime(time.localtime()) # 输出时间戳 相当于time.time()
# 结构化时间--->字符串时间
# time.strftime("格式定义","结构化时间") # 结构化时间参数若不传 则显示当前时间
time.strftime('%Y-%m-%d %X') # 输出显示格式化当前时间
# 字符串时间--->结构化时间
# time.strptime(时间字符串,字符串对应格式)
time.strptime("2020-10-22",'%Y-%m-%d') # 输出显示结构化时间
time.strptime("07/24/2017","%m/%d/%Y")
ps:三者转换都是基于 结构化时间的基础上 格式化时间不能直接转成时间戳
这个时间转换写的比较简单 只够个人平常使用 有兴趣了解更多推荐:
https://www.cnblogs.com/Dominic-Ji/articles/16046931.html#_label5
常见的内置模块之随机数模块
import random
# print(random.random()) # 随机产生0-1之间的小数
# print(random.randint(1,6)) # 随机产生1-6之间的整数
# print(random.randrange(1,100)) # 随机产生1-100之间的数
# print(random.randrange(1,100,2)) # 随机产生指定的整数
# print(random.choice(['一等奖','二等奖','三等奖','谢谢惠顾'])) # 随机抽取一个样本 数据值
# print(random.choices(['一等奖','二等奖','三等奖','谢谢惠顾'])) # 随机抽取一个样本 数据格式: ['二等奖']
# print(random.sample(['jason','tony','jerry'],2)) # 随机抽样 抽指定样本数
# 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))
random_lower = chr(random.randint(97,122))
random_num = str(random.randint(0,9))
# 2.随机三选一
temp = random.choice([random_num,random_upper,random_lower])
code +=temp
return code
ret = get_code(10)
print(ret)
ret = get_code(5)
print(ret)
python进阶之路17 包的使用、collections、time、random模块的更多相关文章
- Python进阶之路---1.4python数据类型-数字
python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print print('hello,python') 1.1pyt ...
- Python进阶之路---1.3python环境搭建
python环境安装 windows python环境安装 下载安装包 https://www.python.org/downloads/ 安装并指定安装目录 C:\python2 ...
- Python进阶之路---1.2python版本差异
Python2.*与python3.*版本差异 作为一个初学者,我们应该如何选择python的版本进行学习呢,这两个版本有什么区别呢,接下来让我们简单了解一下,以便我们后续的学习. Python版本差 ...
- Python进阶之路---1.5python数据类型-字符串
字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...
- python进阶之路之文件处理
Python之文件处理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- python进阶之路4.2---装饰器
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Python进阶之路---1.1python简介
Python简介 Python简介 Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释 ...
- python成长之路17
一:web框架的本质,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1.1:python实现: #!/usr/bin/env python ...
- python进阶之路4.1---生成器与迭代器
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- GO语言的进阶之路-go的程序结构以及包简介
GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...
随机推荐
- Silky微服务框架之模块
模块的定义 Silky是一个包括多个nuget包构成的模块化的框架,每个模块将程序划分为一个个小的结构,在这个结构中有着自己的逻辑代码和自己的作用域,不会影响到其他的结构. 模块类 一般地,一个模块的 ...
- 八、指定节点pod运行在固定节点
指定pod运行在固定节点 一.指定固定节点:Pod.spec.nodeName Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策 ...
- ML-朴素贝叶斯算法
贝叶斯定理 w是由待测数据的所有属性组成的向量.p(c|x)表示,在数据为x时,属于c类的概率. \[p(c|w)=\frac{p(w|c)p(c)}{p(w)} \] 如果数据的目标变量最后有两个结 ...
- Java8新特性:函数式编程
1. 概述 函数式编程学习目的: 能够看懂公司里的代码 大数据量下处理集合效率更高 代码可读性高 消灭嵌套地狱 函数式编程思想: 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我 ...
- DevOps|乱谈开源社区、开源项目与企业内部开源
之前的一篇文章<从特拉斯辞职风波到研发效能中的荒唐事>中关于企业内源的内容在研发效能群内引起了大家的热烈讨论.有的小伙伴不同意,有的小伙伴非常不同意,我觉得这都是非常正常的反馈,话不说不透 ...
- C#之GCHandle
转载 略谈GCHandle C# - Marshal.StructureToPtr方法简介 Marshal类 两个方法StructureToPtr和PtrToStructure实现序列化 字节 数组 ...
- 7 款殿堂级的开源 CMS(内容管理系统)
最近,有读者留言让我推荐开源 CMS.我本想直接回复 WordPress,但是转念一想我玩 WordPress 是 2010 年左右的事情了,都过去十年了,它会不会有些过时呢?有没有新的.更好玩的开源 ...
- 第2-3-6章 打包批量下载附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 5.6 接口开发-根据文件id打包下载附件 5.6.1 接口文档 5.6.2 代码实现 5.6.3 接口测试 5.7 接口开发-根据业务类型/业务id打包下载 5.7.1 接口文档 5.7.2 ...
- TreeUtils工具类一行代码实现列表转树【第三版优化】 三级菜单 三级分类 附视频
一.序言 在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单.多级目录.多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率. 本文将基于 ...
- java中的自动拆装箱
一:是什么 java的自动拆装箱,是从jdk1.5之后被引入的,java中的类型分为基本类型和引用类型,而自动拆装箱,可以让基本类型和对应的包装类,无缝转换.先拿最基本的来看. public clas ...