软件开发目录规范和常用内置模块collections/时间和随机

包的具体使用

虽然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文件夹         主要存放项目配置文件
         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)  # 扑克牌(num='A', color='黑桃') A 黑桃
print(c2, c2.num, c2.color)  # 扑克牌(num='A', color='红桃') A 红桃

2.队列
      队列与堆栈
          队列:先进先出
          堆栈:先进后出
ps:队列和堆栈都是一边只能进一边只能出

常用内置模块之时间模块

Python中有两个模块可以完成时间操作:time和datetime,其中time有这几种方式来表示时间:
  1.时间戳(timestamp):通常来说,时间戳表示的是从19701100:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  2.格式化的时间字符串(Format String)
  3.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

"""
三种时间表现形式
   1.时间戳
      秒数
   2. 结构化时间
      主要给计算机看的 人看不适应
   3.格式化时间
      主要是给人看的
"""
print(time.time())  # 1666164244.5425258(时间戳)
print(time.localtime())  #结构化时间(本地时间)
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=15, tm_min=24, tm_sec=4, 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 15-26-38
print(time.strftime('%Y-%m-%d %X'))  # 2022-10-19 15:26:38
# 重点记住strftime 及%Y%m%d%H%M%S %X=%H%M%S

time.sleep(2) # 让程序原地阻塞指定的秒数
import datetime
print(datetime.datetime.now())  # 2022-10-19 15:36:31.814284
print(datetime.datetime.today())  # 2022-10-19 15:36:31.814284
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 15:40:54.474544
print(datetime.utcnow())  # 2022-10-19 07:40:54.474544

c = datetime(2019, 8, 23, 12, 30)
print('指定日期:', c)  # 指定日期: 2019-08-23 12:30:00

d= datetime.strptime('2018/9/30', '%Y/%m/%d')
print(d)  # 2018-09-30 00:00:00

e = datetime.strptime('2018年9月30日星期六','%Y年%m月%d日星期六')
print(e)  # 2018-09-30 00:00:00

f = datetime.strptime('2018年9月30日星期六9时24分18秒','%Y年%m月%d日星期六%H时%M分%S秒')
print(f)  # 2018-09-30 09:24:18

import datetime
ctime = datetime.date.today()
print(ctime)  # 2022-10-19

time_del = datetime.timedelta(days=3)
print(ctime + time_del)  # 2022-10-22

ctime = datetime.datetime.today()
print(ctime)  # 2022-10-19 15:51:03.921459
time_del = datetime.timedelta(minutes=20)
print(ctime + time_del)  # 2022-10-19 16:11:03.921459

三种时间的格式转化
image

image

格式化时间:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

常用内置模块之随机数模块

import random
print(random.random())  # 随机产生0-1之间的小数 0.8145871824861479
print(random.randint(1,6))  # 随机产生16之间1的整数 2
print(random.randrange(1,100,2))  # 随机产生指定的整数 7
print(random.choice(['一等奖','二等奖','三等奖','谢谢惠顾']))  # 随机抽取一个样本 一等奖
print(random.choices(['一等奖','二等奖','三等奖','谢谢惠顾']))  # 随机抽取一个样本 ['谢谢惠顾']
print(random.sample(['jason','kevin','tony','oscar','jerry','tom'], 2))  # 随机抽取指定样本数 ['tom', 'oscar']
l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
random.shuffle(l1)
print(l1)  # 随机打乱数据集  [2, 10, 5, 'Q', 7, 'K', 3, 9, 6, 4, 'J', 'A', 8]

'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字  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_int = str(random.randint(0,9))
      # 2. 随机三选一
      tmp = random.choice([random_upper,random_lower,random_int])
      code += tmp
   return code

res = get_code(10)
print(res)  # 0ueK0GV4UC
res = get_code(4)
print(res)  # 8U8k
posted @   悠悠-winter  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示