最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Python3萌新入门笔记(41)

Python教程 小楼一夜听春语 4013浏览 0评论

这一篇教程,我们继续了解内置模块。

九、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。

open()函数会创建一个DbfilenameShelf对象,对这个对象的操作和字典一样。
但是,要注意,键值必须是字符串。
示例代码:
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)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)