python常用内置模块


一.collections模块

  • 1 具名元组 namedtuple

  1. 作用:具名元组nametuple,生成可以使用名字来访问元素内容的元组tuple

tuple可以表示不变集合,例如:一个点的二元坐标

语法: namedtuple('名称',[属性list])
  1. namedtuple表示二维坐标系

namedtuple('坐标点',['x','y'])表示二维坐标系

namedtuple('坐标点',['x','y'])表示二维坐标系

# 举例:用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
  1. namedtuple表示圆的坐标

    namedtuple('圆Circle',['x','y','r'])

# 举例:用namedtuple表示一个圆

from collections import namedtuple
circle = namedtuple('圆Circle', ['x', 'y', 'r'])
c1 = circle(1, 2, 4)
print(c1)  # 圆Circle(x=1, y=2, r=4)
print(c1.x)  # 1
print(c1.y)  # 2
print(c1.r)  # 4
  • 2 双端队列 deque

  1. 作用:双端队列deque 两边都能进两边都能出

队列与堆栈

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

  1. deque对于数据的处理

    .pop() 方法和 .popleft()方法

# 举例

from collections import deque
q = deque([1, 2, 3])
print(q)  # deque([1, 2, 3])
print(q.pop())  # 弹出最后一位的数据值 3
print(q.popleft())  # 弹出第一位的数据值 1
  1. 模块multiprocessing的队列Queue

    两者功能相似但略有不同,可以规定队列中数据的个数,用put方法放入数据,用get方法取出Queue中的数据

# 举例

from multiprocessing import Queue
q = Queue(3)  # 声明队列只能放3个数据
q.put(111)  # put 往进去放数据
q.put(222)
q.put(333)
print(q)  # q是队列 <multiprocessing.queues.Queue object at 0x104d94ee0>
print(q.get())  # 111  get 取数据
  • 3 有序字典 OrderedDict

    特点:按照插入的key的顺序,进行有序排列

  1. 无序字典dict
d1 = dict([('a', 1), ('b', 2), ('c', 3)])
print(d1)  # {'a': 1, 'b': 2, 'c': 3}
  1. 有序字典 OrderedDict
# 举例

from collections import OrderedDict

od1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od1)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od1.get('a'))  # 1 获得key 'a'对应的值为 1
print(od1.values())  # 获得od1的values: odict_values([1, 2, 3])
  1. 小练习:将大于60的值保存在字典的k1中,小于60的保存在k2中,
# 先构造一个有k1 k2 的字典,再用for循环导入
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]

1.for 循环
d1 = {'k1': [], 'k2': []}
for i in l1:
    if i < 60:
        d1['k1'].append(i)
    else:
        d1['k2'].append(i)
print(d1)  # {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99]}

2.列表推导式

d1 ={
    'k1':[i for i in l1 if i <60],
    'k2':[i for i in l1 if i >60]
}
print(d1)

3.filter函数

d2 = {
    'k1': list(filter(lambda x: x < 60, l1)),
    'k2': list(filter(lambda x: x > 60, l1))
}
print(d2)
  • 4 统计 Counter

​ 作用:跟踪值出现的次数,生成一个无序的容器类型,以字典的键值对形式存储结果,其中元素为key,计数结果为value

# 举例

res= 'adklfj klasdjfklkldkfjaskdlfjalk'
from collections import Counter
print(Counter(res))  # Counter({'k': 7, 'l': 6, 'a': 4, 'd': 4, 'f': 4, 'j': 4, 's': 2, ' ': 1})

二、time时间模块

​ 在python中时间的表现形式有三种:

  • 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型
  • 结构化的时间(struct_time): struct_time元组中共有九个元素''年:Y,月:m,日:d,时:H,分:M ,秒:S ,一年中的第几周,一年中的第几天,是否是夏令时''
  • 格式化的时间字符串 (Format String

结构化时间:主要是给计算机看的
格式化时间:主要是给人看的

image-20221019113522466

1. time.localtime(secs)

将一个时间戳转换成当前时区的struct_time,secs参数为提供的时候以当前时间为准

import time
print(time.localtime())
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=18, tm_min=34, tm_sec=17, tm_wday=2, tm_yday=292, tm_isdst=0)

print(time.localtime(1))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)

2. time.gmtime(secs)

gmtime()是将一个时间转成格林尼治时间

print(time.gmtime())
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=10, tm_min=39, tm_sec=33, tm_wday=2, tm_yday=292, tm_isdst=0)
print(time.gmtime(2222))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=37, tm_sec=2, tm_wday=3, tm_yday=1, tm_isdst=0)

3. time.strftime(format[, t])

把一个代表时间的元组或者结构化时间转换为格式化时间字符串

import time
print(time.strftime('%Y/%m/%d %H:%M:%S'))  # 2022/10/19 18:46:30
print(time.strftime('%Y/%m/%d %X',time.localtime(9933398)))  # 1970/04/26 07:16:38

4. time.time()

​ 返回当前时间的时间戳

import time
print(time.time())  # 1666176549.509909
print(time.strftime('%Y/%m/%d %X',time.localtime(1666176549.509909)))  # 2022/10/19 18:49:09

5. time.sleep(secs)

让程序原地阻塞指定的秒数

time.sleep(10)  # 让程序原地阻塞10秒

时间戳、结构化时间、格式化时间互相转换

image-20221019113630093

三、datetime时间模块

datetime:更详细的日期类型(年,月,日[,小时[,分钟[,秒[,微秒[,tzinfo]]]]]])年,月和日参数是必需的。

1. datetime.now()datetime.datetime.today()

获取当前日期

import datetime
print(datetime.datetime.now())  # 2022-10-19 19:00:49.876487
print(datetime.datetime.today())  # 2022-10-19 19:00:53.679567

2. datetime.date.today()datetime.time.hour()

import datetime
print(datetime.date.today())  # 2022-10-19
print(datetime.time.hour)  # <attribute 'hour' of 'datetime.time' objects>

datetime中属性的含义:

datetime 年月日 时分秒
date 年月日
time 时分秒

3.datetime.timedelta()

date.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。

# 比如可以用 timedelta去定时发布

# datetime.date 可以精确到天
import datetime
ctime = datetime.date.today()
print(ctime)  # 2022-10-19
time_del = datetime.timedelta(days=3)
print(ctime + time_del)  # 2022-10-22

# datetime.date 可以精确到时分秒
ctime = datetime.datetime.today()
print(ctime)  # 2022-10-19 19:16:09.391063
time_del = datetime.timedelta(minutes=20)
print(ctime + time_del)  # 2022-10-19 19:36:09.391063

4. datetime.date()datetime.datetime()

datetime.date精确到天,datetime.datetime精确到: 年月日 时分秒

from datetime import date, datetime
print(date.today())  # 2022-10-19
print(datetime.today())  # 2022-10-19 19:20:40.145438
print(datetime.utcnow())  # 获取格林尼治时间 2022-10-19 11:20:40.145444
import datetime
# datetime的格式化时间
c = datetime.datetime(2017, 5, 23, 12, 20)
print('指定日期:',c)  # 指定日期: 2017-05-23 12:20:00

四、random随机数模块

1. random.random()random.randint()

random.random() 返回 [0.0, 1.0) 范围内的下一个随机浮点数
random.randint(start,end) 返回一个随机整数

import random

print(random.random())  # 随机产生0-1之间的小数
print(random.randint(1, 6))  # 随机产生1-6之间的整数
-----------------------
0.16370721324370197
1

2. random.randrange()

random.randrange()返回一个随机整数,相较于random.randint() 可以添加步长

print(random.randrange(1, 100, 2))  # 相较于randint可以添加步长
-------------------
75

3. random.choice()random.choices()

随机抽取一个元素

print(random.choice(['1等奖', '2等奖', '3等奖', '谢谢惠顾'])) 
print(random.choices(['1等奖', '2等奖', '3等奖', '谢谢惠顾']))  # 随机抽取一个样本 ['1等奖']
-------------------
谢谢惠顾
['谢谢惠顾']  # choices 返回会带着数据类型

4. random.sample(population, k)

在总体序列population中随机抽取k长度的列表
print(random.sample(['jason',['a',1,'duo'], (10,9), {4,5,6}, 2], 2))
-------------------
[2, (10, 9)]

5. random.shuffle()

​ 随机打乱数据集

l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'K', 'Q']
random.shuffle(l1)  # 随机打乱数据集
print(l1)  
-------------------
[6, 'J', 'K', 5, 'Q', 3, 9, 7, 8, 10, 4, 2]
  • 用random模块产生随机的验证码
'''产生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.随机三选一
        temp = random.choice([random_upper, random_lower, random_int])
        code += temp
    return code

res = get_code(10)
print(res)
res = get_code(4)
print(res)
posted @ 2022-10-19 19:56  Duosg  阅读(1369)  评论(0)    收藏  举报