包的具体使用,编程思想的转变,软件开发目录规范,python常用内置模块
目录
包的具体使用,编程思想的转变,软件开发目录规范,python常用内置模块
今日内容概要
- 包的具体使用
- 编程思想的转变
- 软件开发目录规范
- python常用内置模块
collections模块
time模块和datatime模块
random模块
今日内容详细
包的具体使用
虽然python3对包的要求降低了 不需要__init__.py也可以识别 但是为了兼容性考虑最好还是加上__init__
1.如果只想用包中的某几个模块 那么还是按照之前的导入方式即可
form aaa import md1,md2
2.如果直接导入包名
import aaa
导入包名其实就是导入下面的__init__.py文件,该文件内有什么名字就可以通过包名点什么名字
想通过导包名导入除__init1__以外的模块,需要在__init__内导入其他模块,然后可以通过点的方式使用
编程思想的转变
1.面条版阶段
所有代码全部堆叠在一起
2.函数版阶段
根据功能的不同封装不同的函数
3.模块板阶段
根据功能的不同拆分成不同的py文件
"""
举例子:
第一个阶段可以看成是直接将所有的数据放在C盘
视频 音频 文本 图片
第二个阶段可以看成是将C盘下的数据分类管理
视频文件夹 音频文件夹 文本文件夹 图片文件夹
第三个阶段可以看成是将C盘下的数据根据功能的不同划分到更合适的位置
系统文件夹 C盘
视频文件夹 D盘
图片文件夹 E盘
ps:类似于开公司(小作坊 小公司 上市公司)
为了资源的高效管理
"""
软件开发目录规范
1.文件及目录的名字可以变化 但是思想是不变的 分类管理
2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类
myproject项目文件夹
文件夹 | 文件夹作用 | py文件 | py文件作用 |
---|---|---|---|
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.py | |
7.lib文件夹 | 主要存放项目公共功能 | common.py | |
8.readme文件 | 主要存放项目相关说明 | ||
9.requirements.txt文件 | 主要存放项目所需模块及版本 |
常见内置模块之collections模块
1.具名元组:namedtuple
from collections import namedtuple
# 表示二维坐标系
point = namedtuple('点', ['x', 'y'])
print(point)
p1 = point(1, 2)
print(p1)
print(p1.x)
print(p1.y)
card = namedtuple('扑克牌', ['num', 'color'])
c1 = card('A', '黑♠')
c2 = card('A', '红♥')
print(c1, c1.num, c1.color)
print(c2, c2.num, c2.color)
2.队列
队列与堆栈
队列:先进先出
堆栈:先进后出
队列和堆栈都是一边只能进一边只能出
常见内置模块之时间模块
"""
三种时间表现形式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的 人看不适应
3.格式化时间
主要是给人看的
"""
import time
print(time.time()) # 1666171253.322055
print(time.localtime()) # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=17, tm_min=21, tm_sec=12, tm_wday=2, tm_yday=292, tm_isdst=0)
print(time.strftime('%Y-%m-%d')) # 2022-10-19
print(time.strftime('%Y/%m/%d')) # 2022-10-19
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2022-10-19 18:16:25
print(time.strftime('%Y-%m-%d %X')) # 2022-10-19 18:16:25
# time.sleep(3) # 让程序原地阻塞指定的秒数
import datetime
print(datetime.datetime.now()) # 2022-10-19 18:16:28.654729
print(datetime.datetime.today()) # 2022-10-19 18:16:28.654729
print(datetime.date.today()) # 2022-10-19
'''
datatime 年月日 时分秒
data 年月日
time 时分秒(后续会有此规律)
'''
from datetime import date, datetime
print(date.today()) # 2022-10-19
print(datetime.today()) # 2022-10-19 18:31:27.422101
print(datetime.utcnow()) # 2022-10-19 18:31:27.422101
import datetime
c = datetime.datetime(2017, 5, 23, 12, 20)
print('指定日期:', c) # 指定日期: 2017-05-23 12:20:00
from datetime import datetime
d = datetime.strptime('2017/9/30', '%Y/%m/%d')
print(d) # 2017-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) # 2022-10-19
time_del = datetime.timedelta(days=3)
print(ctime + time_del) # 2022-10-22
常用内置模块之随机数模块
import random
print(random.random()) # 随机产生0到1之间的小数
print(random.randint(1, 6)) # 随机产生1到6之间的整数
print(random.randrange(1, 50, 2)) # 随机产生指定的整数
print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本'二等奖'
print(random.choices(['一等奖', '二等奖', '三等奖', '谢谢惠顾'])) # 随机抽取一个样本['一等奖']
print(random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 2)) # 随机抽取指定样本数['kevin', 'oscar']
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
random.shuffle(l1) # 随机打乱数据集
print(l1)
'''产生图片验证码:每一位都可以是大写字母 小写字母 数字 4位'''
import random
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_int = str(random.randint(0, 9))
# 随机三选一
temp = random.choice([random_int, random_lower, random_upper])
code += temp
return code
res = get_code(10)
print(res)
res1 = get_code(4)
print(res1)