python学习第15天

一.内置方法

1.abs() 绝对值函数

2.round() 四舍五入(n.5,如果n为偶数不进一,如果n为奇数则进一)

3.sum() 计算一个序列的和

4.max() 获取一个序列里面的最大值

5.min() 获取一个序列里面的最小值

max 和min 同sorted(iterable,key=函数)用法相同

6.pow() 计算一个数值的X次方

res = pow(2,3,5)
print(res)

第三个参数的作用是取余

7.range() 产生制定范围数据的可迭代对象

8.bin() 将10进制数据转换成二进制

9.oct() 将10进制数据转换成8进制

10.hex() 将10进制数据转换成16进制

11.chr() 将ascii编码转换成字符

大小写字母相差的ascii编码是32,小写字母更大,a=>97

12.ord() 将字符转换成ascii编码

13.eval() 将字符串当做python代码执行

strvar = "print(111)"
eval(strvar)
# strvar = "a = 10" eval执行不了

14.exec() 将字符串当做python代码执行(功能更强大)

strvar ="a=10"
exec(strvar)
strvar="
for i inrange(10):
    print(i)
"
exec(strvar)

要注意:谨慎使用eval和exec尤其是在和用户交互数据的时候

15.repr() 不转义字符输出字符串

16.input() 接受输入字符串

17.hash() 生成哈希值

两个相同的字符串,无论哈希多少次,都会产生相同的唯一值

  1. 让密码加密 hashlib

  2. 文件的校验 比较文件内容

二.序列化模块

序列化:把不能够直接存储在文件中的数据变得可存储的过程

反序列化:把文件中的数据拿出来,恢复成原来的数据类型的过程

在文件中存储的数据,要么是字符串,要么是字节流

python中,所有的数据类型都可以通过dumps和loads进行序列化和反序列化

(1)pickle模块

import pickle

1.dumps 和loads

dumps() 把任意对象序列化成一个bytes(字节流)

loads() 把任意bytes反序列化成原来的数据

#序列化列表
lst = [1,2,3]
res = pickle.dumps(lst)
print(res)
# 序列化函数
def func():
	print("我是func函数")	
res = pickle.dumps(func)
print(res)
# 序列化迭代器
it = iter(range(10))
res = pickle.dumps(it)

res = pickle.loads(res)
print(res, type(res))
for i in range(3):
	res2 = next(res)
	print(res2)

2.dump和load

dump 把对象序列化后写入到 file-like object(文件对象)中

dic = {"a":1,"b":2}
with open("ceshi3.txt",mode="wb") as fp:
	# dump(要转换的数据,文件对象)
	pickle.dump(dic,fp)

load 把file-like object(文件对象)中的内容拿出来,反序列化成原来的数据

with open("ceshi3.txt",mode="rb") as fp:
	res = pickle.load(fp)

print(res , type(res))

(2)json

所有编程语言都能都识别的数据格式叫做json,是字符串

能够通过json序列化成字符串的有如下类型:int float bool str list tuple dict None

pickle 序列化成字节流

json 序列化成字符串

json:

import json

1.dumps和loads是一对,序列化成字符串

dic = {"name":"王振","age":30,"classroom":"python30","family":["爸爸","妈妈","哥哥","姐姐"]}
# ensure_ascii=False 不通过ascii来显示内容 sort_keys=True 对字典的键来进行排序
res =json.dumps(dic,ensure_ascii=False , sort_keys=True)
print(res , type(res))

# loads反序列化成原来的数据类型
dic = json.loads(res)
print(dic , type(dic))

2.dump和load是一对,针对文件,把数据进行序列化操作

dic = {"name":"王振","age":30,"classroom":"python30","family":["爸爸","妈妈","哥哥","姐姐"]}
with open("ceshi5.json",mode="w",encoding="utf-8") as fp:
	# dump(要转换的数据,文件对象)
	json.dump(dic,fp,ensure_ascii=False)
	
# load反序列化成原来的数据类型
with open("ceshi5.json",mode="r",encoding="utf-8") as fp:
	dic = json.load(fp)
	
print(dic, type(dic))

3.json和pickle两个模块的区别:

1)json序列化后的数据类型是str,所有编程语言都能识别(用于数据交流)

但是仅限于(int float bool str list tuple dict None

json不能连续load,只能一次性拿出所有数据

2)pickle序列化之后的数据类型是bytes(用于数据存储转换)

所有数据类型都可转化,但仅限于python之间的存储传输

pickle可以连续load,可以把多套数据放到同一个文件中

4.try...except...

抑制报错,如果try代码块里面有问题,就执行except中的代码

try:
	with open("ceshi7.pkl",mode="rb") as fp:
		while True:
			dic = pickle.load(fp)
			print(dic)
except:
	pass

(3)time

import time

1.sleep() 程序睡眠等待

'''程序在当前行,阻塞3秒之后,代码往下执行'''
# time.sleep(3)
# print("我睡醒了")

2.进度条

1)定义进度条样式

print("[%-50s]" % ("###############"))
print("[%-50s]" % ("######################"))
print("[%-50s]" % ("##############################"))

2)让进度条动起来

strvar = ""
for i in range(50):
	strvar += "#"
	time.sleep(0.1)
	print("
[%-50s]" % (strvar) ,end="")

3)根据文件大小,调整进度条的位置

def progress(percent):
	if percent > 1:
		percent = 1
	
	# 打印出对应的# 号效果
	strvar = int(50 * percent) * "#"
	# %% => %号的符号效果
	print("
[%-50s] %d%%" % (strvar , int(100 * percent)) ,end="")

recv_size = 0
# 假设文件总大小是 1028000
total_size = 1028000
while recv_size < total_size:
	time.sleep(0.01)

	# 一次接受的字节数是1024
	recv_size += 1024
	percent = recv_size/total_size
	progress(percent)
原文地址:https://www.cnblogs.com/yunchao-520/p/12920106.html