这一篇教程,我们继续了解内置模块。
九、math模块
math模块包含了一些数学计算的函数,例如平方根函数、正余弦函数、正余切函数、角度与弧度转换函数等等。
不过,一般数学函数的用途比较少,这里只做一些简单的举例。
pi:保存了圆周率的变量
ceil(x):向上取整函数,返回参数x向上相邻的整数,如果参数为整数,返回原值。
floor(x):向下上取整函数,返回参数x的整数部分,如果参数为整数,返回原值。
fsum(iterable):求和函数,返回值为可迭代参数中的所有数值的和。
pow(x,y)):幂计算函数,返回参数x的y次方。
sqrt(x):平方根计算函数,返回参数x的平方根。
示例代码:
import math print(math.pi) # 圆周率,显示输出结果为:3.141592653589793 print(math.ceil(1.1)) # 向上取整,显示输出结果为:2 print(math.floor(1.9)) # 向下取整,显示输出结果为:1 print(math.fsum([1.2, 2.24, 5.58])) # 求和,显示输出结果为:9.02 print(math.pow(2,3)) # 幂计算,显示输出结果为:8.0 print(math.sqrt(4)) # 平方根将计算,显示输出结果为:2.0
十、random模块
random模块是关于随机数的模块。
随机数的应用比较常见,所以对这个模块的了解比较重要。
同样,我先把模块中的常用功能一一列出。
random():返回值为0~1之间的随机小数。(长度为小数点后18位)
uniform(a, b):返回值为大于等于参数a且小于参数b的随机小数。
randint(a, b):返回值为大于等于参数a且小于等于参数b的随机整数。
randrange(start, stop[, step]):返回值为一定范围内的随机整数。参数start为起始数值,参数stop为终止数值(返回值不包含终止数值),参数step为步长。只输入一个参数(stop)时,返回值为大于等于0且小于参数数值的随机整数。
choice(seq):返回值为参数序列中的某一元素。
choices(population, weights=None, *, cum_weights=None, k=1):返回值为参数k大小的元素列表,列表中元素可重复,列表元素来自于参数population。参数weights为相对权重列表,列表中的元素个数与参数population相同,参数weights中元素数值大小决定参数population中相同位置元素的权重(可以理解为随机概率),权重越高随机出现概率越大。参数cum_weights是累积权重列表,累积权重通过相对权重计算,例如相对权重[1,5,1]等同于累积权重[1,6,7],即[(0+1),(1+5),(1+5+1)]。使用累积权重有更高的执行效率。
random.sample(population, k):返回值为参数k大小的元素列表,列表中元素不重复,列表元素来自于参数population。
shuffle(x):返回值为重新随机排序的序列,参数x为序列。如果对不可变序列重新随机排序,可以使用sample(x, k=len(x))。
getrandbits(k):返回值为整数,返回值的二进制数值长度为k。例如,k为2时,返回值为0,1,2,3之一,即(00,01,10,11)之一。
示例代码:
import random print(random.random()) # 显示输出结果为0~1之间的小数。(小数点后18位数字) print(random.uniform(0, 10)) # 显示输出结果为大于等于0且小于10的随机小数。 print(random.randint(0, 10)) # 显示输出结果为大于等于0且小于等于10的随机小数。 print(random.randrange(0, 10, 2)) # 显示输出结果为0、2、4、6、8中的某个数字。 print(random.choice(['好帅', '好酷', '好厉害', '棒棒哒'])) # 显示输出结果为列表中某一元素。 print(random.choices([1, 2, 3], cum_weights=[1, 6, 7], k=2)) # 显示输出结果为基于首个参数列表的长度为2的随机列表。 print(random.choices([1, 2, 3], [1, 5, 1], k=2)) # 显示输出结果为基于首个参数列表的长度为2的随机列表。 print(random.sample([1, 2, 3, 4, 5], 2)) # 显示输出结果为基于首个参数列表的长度为2的随机列表。 lst = [1, 2, 3, 4, 5] random.shuffle(lst) # 列表元素随机改变位置。 print(lst) # 显示输出结果为被随机重排位置的列表。 print(random.getrandbits(2)) # 显示输出结果为0~3的随机整数,参数为随机整数对应的二进制数字的最大位数。
接下来,我们通过随机数来完成获取4位包含字母与数字的随机验证码(字符可重复)。
示例代码:
code = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz0123456789', k=4)) # 通过join()方法,将可迭代对象中的字符连接为字符串,这个方法通过字符串分隔符(''为不添加分隔符)调用。 print(code) # 显示输出结果类似于:n22r
最后,说明一下,random模块所获取的随机数是伪随机数。
伪随机数不是假随机数的意思,伪随机数确实能够获取到每次不同的随机数值,能够满足我们一般获取随机数的需求。
但是,因为伪随机数是通过不断变化的随机数种子(例如:系统时间),通过特定的算法得到的随机数,因此,伪随机数具有一定的规律,它可以被预测。
如果想获取安全性更高的接近真正随机性的随机数,可以使用os模块中的urandom()函数或者当前模块中的SystemRandom类。
十一、pickle模块
pickle模块用于对象持久化,也就是将内存中的对象保存到可永久保存的存储设备中(例如:磁盘)。
pikle模块提供简单的持久化功能,包含两个主要函数(此处仅列出必填参数):
dump(obj, file):将对象obj序列化并存储到文件对象file中。
load(file):按dump的顺序,依次读取文件对象(file)中每次dump的内容。
示例代码:
import pickle path = r'C:\Users\Administrator\Desktop\date.dat' with open(path, 'wb+') as file: # 打开文件进行序列化操作 user = ['小楼', '男', '18', '帅'] learn = ['Python', 'Axure'] pickle.dump(user,file) # 数据倾出到文件 pickle.dump(learn,file) # 数据倾出到文件 user.append('很厉害') pickle.dump(user, file) # 数据倾出到文件(不会覆盖上次倾出) with open(path,'rb+') as file: # 打开文件进行反序列化操作 print(pickle.load(file)) # 显示输出结果为:['小楼', '男', '18', '帅'] print(pickle.load(file)) #显示输出结果为:['Python', 'Axure'] print(pickle.load(file)) #显示输出结果为:['小楼', '男', '18', '帅', '很厉害'] print(pickle.load(file)) # EOFError: Ran out of input(文件末端异常:输入已耗尽)
十二、shelve模块
使用pickle模块虽然能够进行数据的持久化,但是大家也能够看到,dump操作可以进行多次,load操作却只能按照dump的顺序依次读取一次。
如果我们想要实现比较灵活的dump和load操作,可以使用shelve模块。
shelve模块对pickle模块进行了封装,可以持久化所有pickle所支持的数据类型。
通过shelve模块创建的文件存储的是一个字典。
这个模块只提供了一个open()函数,用于打开持久化的字典,进行数据的持久化和读取操作。
open(filename, flag=’c’, protocol=None, writeback=False):参数filename为文件名或文件路径;参数flag可选值为’c’(create:不存在则创建)和’n’(new:新建空文件);参数protocol为整数值,数值1、2可支持早期Python版本对文件的读取;参数writeback默认为False,即不将缓存写回打开的文件,当需要写回时,需要指定为True。
import shelve path = r'C:\Users\Administrator\Desktop\date' with shelve.open(path, 'c', writeback=True) as dat: # 打开已有文件或创建新文件 dat['user'] = ['小楼', '男', '18', '帅'] # 数据添加字典 dat['learn'] = ['Python', 'Axure'] print(dat['user']) # 显示输出结果为:['小楼', '男', '18', '帅'] print(dat['learn']) # 显示输出结果为:['Python', 'Axure'] dat['user'].append('很厉害') # 参数writeback为False时,append所做的修改不会被写回。print(dat['user'])的结果仍然为:['小楼', '男', '18', '帅'] print(dat['user']) # 显示输出结果为:['小楼', '男', '18', '帅', '很厉害']
本节知识点:
1、math模块
2、random模块
3、pickle模块
4、shelve模块
本节英文单词与中文释义:
1、math:数学
2、pi:圆周率
3、ceil:天花板
4、floor:地板
5、fsum(floating point sum):浮点数总和
6、pow(power):幂
7、sqrt(square root):平方根
8、random:随机数
9、uniform:规格一致的
10、choice:选取
11、population:特定种群
12、weights:权重(重要性)
13、cum(cumulative):累积的
14、sample:抽样
15、shuffle:洗牌
16、getrandbits(get random bits):随机获取一定位数
17、pickle:泡菜(持久化)
18、dump:倾出
19、load:装入
20、shelve:搁置
21、flag:标志
22、protocol:协议
23、EOF(end of file):文件末端
转载请注明:魔力Python » Python3萌新入门笔记(41)