day17 内置方法、数学模块、randrange随机模块、序列化模块pickle

内置方法

abs 绝对值函数
res = abs(-100)
print(res)

round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数,则进一!)
"""特点:奇进偶不进"""
res = round(4.51)
# res = round(4.5) # 4
# res = round(3.5) # 4
print(res)

 

sum 计算一个序列的和
lst = [-100,20,90,35]
res = sum(lst)
print(res)

def func(lst):
	total = 0
	for i in lst:
		total += i
	return total
print(func(lst))

max 获取一个序列里边的最大值
lst = [-100,20,90,35]
res = max(lst)
print(res)

 

min 获取一个序列里边的最小值
lst = [-100,20,90,35]
res = min(lst)
print(res)

 

自定义方法

lst_new = sorted(lst)
print(lst_new)
maxval = lst_new[-1]
minval = lst_new[0]
print(maxval,minval)

print("<====>")
lst = [("袁伟倬",81),("李虎玲",82),("刘鑫炜",71),("孙京华",70)]

def func(n):
	# print(n)
	return n[-1] # 按照年龄返回
"""
70 => ("孙京华",70)
71 => ("刘鑫炜",71)
81 => ("袁伟倬",81)
82 => ("李虎玲",82)
"""
res = max(lst,key=func)
res = min(lst,key=func)
# res = max(lst)
print(res)


print("<=========>")
dic = {"李虎玲":-100,"刘鑫炜":45,"袁伟倬":-70}
def func(n):
	# print(n)
	return abs(dic[n])
res = max(dic,key=func)
print(res)

# 改写成lambda表达式
res = max(dic,key = lambda n : abs(dic[n]))
print(res)

 

改写成lambda表达式
res = max(dic,key = lambda n : abs(dic[n]))
print(res)

 

pow 计算某个数值的x次方
"""pow(参数1,参数2[,参数3]) 参数3代表的是取余数"""
res = pow(2,3)
print(res)
res = pow(2,3,3) # 2
res = pow(2,3,4) # 0
print(res)

 

range 产生指定范围数据的可迭代对象
'''range(start,end,step)'''
for i in range(1,11,3):
	print(i) # 1 4 7 10 
for i in range(11,0,-3):
	print(i) # 11 8 5 2 ...

 

bin 将10进制数据转化为二进制
res = bin(255)
print(res)
oct 将10进制数据转化为八进制
res = oct(87)
print(res)
hex 将10进制数据转化为16进制
res = hex(255)
print(res)

 

chr 将ASCII编码转换为字符
res = chr(97)
print(res)

 

ord 将字符转换为ASCII编码
res = ord("A")
print(res)

 

eval 将字符串当作python代码执行
strvar = "print('深圳的天气可真的太热了,受不了')"
# strvar = "a = 90" error 不能执行
eval(strvar)

 

exec 将字符串当作python代码执行(功能更强大)
"""注意点:在与用户交互的时候,慎用"""
strvar = "a = 90"
exec(strvar)
print(a)

strvar = """
for i in range(10):
	print("你是大傻瓜")
"""
exec(strvar)

 

repr 不转义字符输出字符串
strvar = "E:\nython31_gx\day17"
print(repr(strvar))

 

input 接受输入字符串 (永远接受的是字符串)
name = input("你妈贵姓?")
print(name)

 

hash 生成哈希值
"""相同的两个数据经过哈希算法运算得出的结果一定相同"""
res1 = hash("abc")
res2 = hash("abc")
print(res1,res2)

"""
1.文件校验
2.密码加密
"""

with open("ceshi1.txt",mode="r+",encoding="utf-8") as fp:
	strvar1 = fp.read()
	res1 = hash(strvar)

with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp:
	strvar2 = fp.read()
	res2 = hash(strvar)
# print(res1 == res2)

 

数学模块  import math

ceil() 向上取整操作 (对比内置round)
res = math.ceil(4.9)
res = math.ceil(-3.5)
print(res)

 

floor() 向下取整操作 (对比内置round)
res = math.floor(3.9)
res = math.floor(-3.8)
print(res)

 

pow() 计算一个数值的N次方(结果为浮点数) (对比内置pow)
res = math.pow(2,3)
# res = math.pow(2,3,3) error # 只有2个参数
print(res) # 结果一定是小数:8.0

 

sqrt() 开平方运算(结果浮点数)
res = math.sqrt(9)
print(res) # 结果一定是小数:3.0

 

fabs() 计算一个数值的绝对值 (结果浮点数) (对比内置abs)
res = math.fabs(-99)
print(res) # 99.0

 

modf() 将一个数值拆分为整数和小数两部分组成元组
res = math.modf(13.45)
print(res) # (0.4499999999999993, 13.0)

 

copysign() 将参数第二个数值的正负号拷贝给第一个 (返回一个小数)
res = math.copysign(-13,-1)
print(res) # 返回一个小数

  

fsum() 将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum)
lst = [1,2,3,4,6]
res = math.fsum(lst)
print(res) # 返回一个小数

 

圆周率常数 pi
res = math.pi
print(res)

 

random 随机模块  import random

random() 获取随机0-1之间的小数(左闭右开) 0<= x <1
res = random.random()
print(res)

  

uniform() 获取指定范围内的随机小数(左闭右开)
res = random.uniform(1,3) # 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,1)
print(res)

  

randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值) **
# 一个参数
res = random.randrange(5) # 0~4
# 二个参数
res = random.randrange(2,8) # 2~7 
# 三个参数
res = random.randrange(1,10,3) # 1,4,7
print(res)

 

randint() 随机产生指定范围内的随机整数 (了解)
res = random.randint(3,4) # 3,4
# res = random.randint(3) error
# res = random.randint(3,7,2) error # 3 5 7
print(res)

 

choice() 随机获取序列中的值(多选一)
lst = ["刘鑫","刘子豪","孙致和","高旭峰","戈隆"]
res = random.choice(lst)
print(res)

def mychoice(lst):
	num = random.randrange(len(lst)) # 0 1 2 3 4
	return lst[num]
res = mychoice(lst)
print(res)
# lambda 表达式
func = lambda lst : lst[random.randrange(len(lst))]
print(func(lst))

 

sample() 随机获取序列中的值(多选多) [返回列表]
lst = ["刘鑫","刘子豪","孙致和","高旭峰","戈隆"]
res = random.sample(lst,1)
res = random.sample(lst,2)
print(res)

 

shuffle() 随机打乱序列中的值(直接打乱原序列)
lst = ["刘鑫","刘子豪","孙致和","高旭峰","戈隆"]
random.shuffle(lst)
print(lst)

  

验证码(练习)

def yanzhengma():
	# 验证码当中含有小写字母,大写字母,数字
	# 小写字母:97~122	
	strvar = ""	
	# 随机抽4次
	for i 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)
	return strvar
res = yanzhengma()
print(res)

 

序列化模块 pickle  import pickle

1.什么是序列化和反序列化?

不能够直接存储的数据变得可存储,这个过程叫做序列化
把文件中的数据拿出来,恢复成原来的数据类型,这个过程叫做反序列化

2.为什么要序列化?

在文件中存储的数据只能是字符串 或者是 字节流,不能是其他数据类型
如果想要存储,需要序列化.

3.Pickle的功能究竟有多强大?

pickle模块可以序列化一切数据类型

一个错误的示范

with open("ceshi0727.txt",mode="w",encoding="utf-8") as fp:
    fp.write(lst)
# 只有字符串可以使用encode 和 decode 转换字节流
lst.encode() error

容器类型的序列化和反序列化

复制代码
# 容器类型数据可以被序列化
#dumps 把任意对象序列化成一个bytes
res = pickle.dumps(lst)
print(res)

#loads 把任意bytes反序列化成原来数据
lst = pickle.loads(res)
print(lst,type(lst))
复制代码

函数的序列化和反序列化

复制代码
def func():
    print("我是最帅的!")
# 序列化
res = pickle.dumps(func)
print(res)

# 反序列化
func = pickle.loads(res)
func()
复制代码

迭代器的序列化和反序列化

复制代码
# 迭代器可以序列化
# 序列化
it = iter(range(10))
res = pickle.dumps(it)

# 反序列化
it = pickle.loads(res)
for i in it:
    print(i)
复制代码

dump和load(针对文件对象)

复制代码
#dump  把对象序列化后写入到file-like Object(即文件对象)
lst = ["Fly","Djie","MiGod"]
with open("0728.txt",mode="wb") as fp:
    # dump(数据,文件对象)
    pickle.dump(lst,fp)

#load  把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据
with open("0728.txt",mode="rb") as fp:
    res = pickle.load(fp)
    print(res,type(res))
复制代码

用dumps和loads对文件进行操作

复制代码
# dumps 和 loads 对文件操作 (区分)
lst = ["Alan","Dnan","LiangC"]
res = pickle.dumps(lst)
with open("0729.txt",mode="wb") as fp:
    fp.write(res)

with open("0729.txt",mode="rb") as fp:
    res = fp.read()
    print(res)
    lst = pickle.loads(res)
    print(lst , type(lst))

 

posted @ 2020-07-27 22:22  liyaaa  阅读(160)  评论(0编辑  收藏  举报