day17:内置方法&math模块&random模块&pickle模块
内置方法1.round:四舍五入? 正常遵守四舍五入,但在n.5结构中,n为偶数则舍去,n为奇数则进一. res1 = round(4.51) # 5 res2 = round(4.5) 4 res3 = round(3.5) 4 res4 = round(4.12) 4 2.abs:绝对值函数 res = abs(-100) 100
3.sum:计算一个序列的和 lst = [-100,20,90,35] res = sum(lst) 45 4.max min:获取一个序列里面的最大(最小)值 lst = [-100,1)">] max 获取一个序列里边的最大值 res = max(lst) print(res) min 获取一个序列里边的最小值 res = min(lst) print(res) 扩展:max min与func形成高阶函数 lst = [("Alan",81),(CatHurt1dao)] def func(n): return n[-1] 按照年龄返回 """ 70 => ("1dao",70) 71 => ("Hurt",71) 81 => ("Alan",81) 82 => ("Cat",82) """ res = max(lst,key=func) res = min(lst,1)">func) print(res) dic = {Giao":-100,Mojo":45,1)">Song":-70} print(n) return abs(dic[n]) res = max(dic,1)">(res) 改写成lambda表达式 res = max(dic,key = lambda n : abs(dic[n])) print(res) 5.pow:计算某个数值的x次方 pow(参数1,参数2[,参数3]) 参数3代表的是取余数 res = pow(2,3) res = pow(2,3,3) 2 res = pow(2,4) 0 6.range:产生指定范围数据的可迭代对象 '''range(start,end,step)''' for i in range(1,11,1)">): print(i) 1 4 7 10 in range(11,-3 11 8 5 2 ... 7.bin oct hex:十进制转化成2/8/16进制 bin 将10进制数据转化为二进制 res = bin(255) oct 将10进制数据转化为八进制 res = oct(87 hex 将10进制数据转化为16进制 res = hex(255print(res) 8.chr ord:ASCII码和字符之间的相互转换 chr 将ASCII编码转换为字符 res = chr(97print(res) "A" # ord 将字符转换为ASCII编码 res = ord(A" 97 9. eval exec:将字符串当作python代码执行 eval 将字符串当作python代码执行 strvar = print('深圳的天气可真的太热了,受不了')" strvar = "a = 90" error 不能执行 eval(strvar) 10.repr:不转义字符输出字符串 strvar = E:nython31_gxday17print(repr(strvar)) 11.input:接受输入字符串 (永远接受的是字符串) name = input(你妈贵姓?print(name) 12.hash:生成哈希值 相同的两个数据经过哈希算法运算得出的结果一定相同 res1 = hash(abc) res2 = hash((res1,res2) 1.文件校验 2.密码加密 with open(ceshi1.txtr+utf-8) as fp: strvar1 = fp.read() res1 = hash(strvar) with open(ceshi2.txt) as fp: strvar2 = fp.read() res2 = hash(strvar) print(res1 == res2) math模块### 数学模块 import math ceil() 向上取整操作 (对比内置round)* res = math.ceil(4.9) 5 res = math.ceil(-3.5) -3 floor() 向下取整操作 (对比内置round)* res = math.floor(3.9) 3 res = math.floor(-3.8) -4 pow() 计算一个数值的N次方(结果为浮点数) (对比内置pow) res = math.pow(2,1)"> 8 res = math.pow(2,3) error # 只有2个参数 结果一定是小数:8.0 sqrt() 开平方运算(结果浮点数)* res = math.sqrt(9 结果一定是小数:3.0 fabs() 计算一个数值的绝对值 (结果浮点数) (对比内置abs) res = math.fabs(-99 99.0 modf() 将一个数值拆分为整数和小数两部分组成元组* res = math.modf(13.45 (0.4499999999999993,13.0) copysign() 将参数第二个数值的正负号拷贝给第一个 (返回一个小数)* res = math.copysign(-13,-1 返回一个小数 fsum() 将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum) lst = [1,2,4,6] res = math.fsum(lst) 圆周率常数 pi* res = math.pi print(res) random模块### random 随机模块 random random() 获取随机0-1之间的小数(左闭右开) 0<= x <1 res = random.random() randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值) ** 一个参数 res = random.randrange(5) 0~4 二个参数 res = random.randrange(2,8) 2~7 三个参数 res = random.randrange(1,10,1)"> 1,7 randint() 随机产生指定范围内的随机整数 (了解) res = random.randint(3,1)"> 3,4 res = random.randint(3) error res = random.randint(3,7,2) error # 3 5 7 uniform() 获取指定范围内的随机小数(左闭右开) res = random.uniform(1,1)"> 1<=x<3 小数 return a + (b-a) * self.random() a=3,b=1 3 + (1-3) * x = 0 => 3 3 + (1-3) * x = 1 => 1 1<x<=3 res = random.uniform(3,1choice() 随机获取序列中的值(多选一) lst = [刘鑫刘子豪孙致和高旭峰戈隆 random.choice(lst) mychoice(lst): num = random.randrange(len(lst)) 0 1 2 3 4 lst[num] res = mychoice(lst) lambda 表达式 func = lst : lst[random.randrange(len(lst))] (func(lst)) sample() 随机获取序列中的值(多选多) [返回列表] lst = [] res = random.sample(lst,1)">) res = random.sample(lst,2shuffle() 随机打乱序列中的值(直接打乱原序列) lst = [] random.shuffle(lst) print(lst) 用random模块实现验证码的生成yanzhengma(): 验证码当中含有小写字母,大写字母,数字 小写字母:97~122 strvar = "" 随机抽4次 in range(4): s_char = chr(random.randrange(97,123)) 大写字母:65~90 b_char = chr(random.randrange(65,91 # 0~9 num = str(random.randrange(10)) lst = [s_char,b_char,num] strvar += random.choice(lst) strvar res = yanzhengma() print(res) pickle模块1.什么是序列化和反序列化? 把不能够直接存储的数据变得可存储,这个过程叫做序列化 2.为什么要序列化? 在文件中存储的数据只能是字符串 或者是 字节流,不能是其他数据类型 3.Pickle的功能究竟有多强大? pickle模块可以序列化一切数据类型 一个错误的示范with open(ceshi0727.txtw) as fp: fp.write(lst) 只有字符串可以使用encode 和 decode 转换字节流 lst.encode() error 容器类型的序列化和反序列化容器类型数据可以被序列化dumps 把任意对象序列化成一个bytes res = pickle.dumps(lst) loads 把任意bytes反序列化成原来数据 lst = pickle.loads(res) print(lst,type(lst)) 函数的序列化和反序列化func(): print(我是最帅的! 序列化 res = pickle.dumps(func) 反序列化 func = pickle.loads(res) func() 迭代器的序列化和反序列化迭代器可以序列化 序列化 it = iter(range(10)) res = pickle.dumps(it) 反序列化 it =in it: print(i) dump和load(针对文件对象)dump 把对象序列化后写入到file-like Object(即文件对象) lst = ["Fly"DjieMiGod] with open(0728.txtwb) as fp: dump(数据,文件对象) pickle.dump(lst,fp) load 把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据 with open(rb) as fp: res = pickle.load(fp) print(res,type(res)) 用dumps和loads对文件进行操作dumps 和 loads 对文件操作 (区分) lst = ["Alan"Dnan"LiangC pickle.dumps(lst) with open(0729.txt) as fp: fp.write(res) with open( fp.read() (res) lst = pickle.loads(res) (编辑:李大同) |