包的具体使用与collections模块time模块,random模块

包的具体使用

	我们想要在python3中使用包,虽然相对python2来说可以不用添加__init__.py, 但是为了兼容性更好还是加上__init__
    
在导入包的时候 索要名字其实是跟包里面的__init__.py要
	1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入
		上述方式的好处在于__init__可以提前帮你准备好可以使用的名字
		
	2.也可以直接忽略__init__的存在使用绝对导入即可
		上述方式的好处在于不需要考虑包的存在 直接当成普通文件夹即可

编程思想的演变

1.面条版阶段
	所有的代码全部堆叠在一起。(我们之前的作业)
2.函数版阶段
	根据功能的不同封装不同的函数(学过函数之后使用的方法)
3.模块板阶段
	根据功能的不同拆分成不同的py文件。方便管理

软件开发目录规范

1.为了方便 针对不同的文件做出不同功能的分类和管理.

1. bin 文件夹    #  主要存放项目启动文件
    start.py     # 启动文件可以放在bin目录下,也可以直接放在项目根目录
2. conf 文件夹   #  主要存放项目配置文件    
    settings.py  # 存放项目的默认配置
3.core文件夹     # 存放项目的核心文件
    src.py      
4.lib文件夹       # 存放项目公共功能
	common.py 
5. interface文件夹  #存放项目接口文件
    goods.py  #  根据具体业务逻辑划分对应的文件
    user.py
    account.py
6. db文件夹      # 主要存放项目相关数据
    userinfo.txt
    db_handler.py  # 存放数据库操作相关代码
7.log文件夹      # 存放项目日志文件
   log.log
8. readme文件    # 存放项目相关说明书	
9. requirements.txt文件  #存放项目所需模块及版本
	

常用内置模块值collections模块

具名元组: namedtuple


 我们在使用不可变元组时, eg 我们需要查看一个坐标。(2,3)很难看出这是一个坐标,我们可以使用namedtuple来表述出更加详细。
from collections import namedtuple
# 1.建立一个元组对象模板
point = namedtuple('坐标', ['x', 'y'])
p1 = point(3, 5)
print(p1)
# 坐标(x=3, y=5)

# 创建诸多元组数据
person = namedtuple('周衍根',['项目','价格'])
c1 = person('spa', 198)
print(c1)
# 周衍根(项目='spa', 价格=198)
person = namedtuple('贵宾','name project price')
c1 = person('周衍根','spa', 198)
print(c1)
#贵宾(name='周衍根', project='spa', price=198)    
 扑克牌:
 card = namedtuple('扑克牌', ['num', 'color'])
    c1 = card('A', '黑♠')
    c2 = card('A', '红♥')
    print(c1.num, c1.color)  # A 黑♠
    print(c2.num, c2.color)  # A 红♥

统计:Counter
可以追踪数据集中数据出现的次数,和我们之前做的一道作业差不多,这是简写

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)

# Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

得到的是一种类似字典的数据类型。

deque 队列

队列 先进先出,默认是只有一端进,一端出
可以使用append的方法从后面增加
from collections import deque
l1 = deque([11,22,33])
l1.append(35)
print(l1)
# deque([11, 22, 33, 35])
默认是从尾部添加
# 这里的 append 也可以调整方向从左边新增 使用appendleft
l1.appendleft(8)
print(l1)
# 还可以使用pop方法弹出,pop也可以调整从左边弹
l1.pop()  
print(l1)
l1.popleft()
print(l1)
------------------------------------------------------------------------------------

import queue
a1 = queue.Queue(2)  # 最多只能放2个数据
a1.put(111)
a1.put(222)
a1.put(333)
print(a1.get())
print(a1.get())
print(a1.get())  # 上面我们规定了最多只能放2个数据,如果超出则程序会原地等待

image

image

常用内置模块之时间模块

import time
time有三种时间表现形式
1.时间戳
2.结构化时间
3.格式化时间
------------------------------------------------------------------------------------
1.时间戳
  就是time.time() 方法调用出来的
  距离1970年00点00时00分 到现在的秒数
import time
print(time.time())  # 1666165654.0909235
------------------------------------------------------------------------------------
2.结构化时间
  结构化时间主要是给电脑看的
 time.localtime()
 import time
print(time.localtime()) #  本地时区 time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=15, tm_min=48, tm_sec=25, tm_wday=2, tm_yday=292, tm_isdst=0)
 print(time.gmtime())     # UTC时区的struct_time

image

3.格式化时间
  给人看的
 时间格式 :2022/10/19 15:50:00
time.strftime()
"""%Y 年  %m 月  %d 日   %H 时  %M 分 %S 秒  %X 本地相应时间 """
1.使用方法  time.strftime()
import time
res = time.strftime('%Y年%m月%d日%H时%M分%S秒')
print(res) # 2022年10月19日15时54分02秒

2.使用 strptime 可以把格式化时间转成 结构化时间
res = time.strptime('1994年11月11日11时11分11秒','%Y年%m月%d日%H时%M分%S秒')  #time.struct_time(tm_year=1994, tm_mon=11, tm_mday=11, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=4, tm_yday=315, tm_isdst=-1)
print(res)
-----------------------------------------------------------------------------------
datetime 模块
"""datetime 获取年月日时分秒
   date 获取年月日
   time 时分秒"""
datetime.strptime()
from datetime import datetime
res = datetime.strptime('1994年11月11日11时11分11秒','%Y年%m月%d日%H时%M分%S秒')
print(res)  # 1994-11-11 11:11:11
-----------------------------------------------------------------------------------
time.sleep(5) 睡眠 停下 5秒
-----------------------------------------------------------------------------------
from datetime import date,datetime
print(date.today())  #获取当前年月日  2022-10-19
print(datetime.today())  # 获取当前年月日 时分秒  2022-10-19 16:17:40.603321
-----------------------------------------------------------------------------------
import datetime
a = datetime.datetime(1994,11,11)
print('出生年月',a)  # 出生年月 1994-11-11 00:00:00
可以获取指定日期
-----------------------------------------------------------------------------------
import datetime
a = datetime.date.today()
print(b)
b = datetime.timedelta(days =1)  
print(a + b)
可以设置定时任务,  假设a 时开始时间, b 时结束时间   给b设定一个条件。 1天后
2022-10-19
2022-10-20
这是给出的条件是天, 也可以设置分钟如minutes。 秒也行。

常用内置模块之随机数模块(random)

可以根据我们给的条件产生一个随机数
import random
print(random.random())  # 随机产生一个0到1之间的小数  基本用不到
print(random.uniform(1,3)) # 随机产生一个1到3之间的小数  基本用不到
print(random.randint(1,3)) # 随机产生一个1到3之间的整数,这个功能可以用来随机获取数据,比如说微信里的摇骰子
random.shuffle() 
可以随机打乱一个数据集
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]
random.shuffle(l1)
print(l1) # [6, 14, 4, 8, 9, 1, 13, 3, 11, 2, 12, 7, 5]
抽奖也可以
random.choice()  # 随机抽取一个
l1 = ['iphone 14', '大彩电', '4090', '1060', '750']
print(random.choice(l1))
print(random.choices(l1))  # choices 抽出来是一个列表

random.sample(l1,2) # 指定数量抽取
l1 = ['iphone 14', '大彩电', '4090', '1060', '750']
print(random.sample(l1, 2))

利用random模块产生图片验证函数写法

import random
def get_code(n):
    code = ''
    for i in range(n):
        # 先产生随机的大写,小写字母,还有数字
        random_upper = chr(random.randint(65,90))
        # chr 可以产生一个对应数字的英文字母
        random_lower = chr(random.randint(97,122))
        # 数字要转成字符串
        random_int = str(random.randint(0,6))
        # 随机三选一
        temp = random.choice([random_upper, random_lower, random_int])
        code += temp
    return code


res = get_code(7)  # 7位数验证码
print(res)
posted @ 2022-10-19 19:30  李阿鸡  阅读(36)  评论(0编辑  收藏  举报
Title