9.7 pickle模块
- 思考:为什么要有pickle模块?pickle模块有什么用?
- pickle也是序列化和反序列化,json可以跨平台,只支持:str/int/flot/dict/list/bool/None这几个数据类型.
- pickle支持python中任意数据类型,但是不能跨平台(不通过平台函数不同)。用法和json一样,pickle序列化过程以二进制形式存储。
1. 内存中(了解)
import pickle
def func():
print('f1')
(1)序列化
res=pickle.dumps(func)
print(res,type(res))
# 输出
b'\x80\x04\x95\x15\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x04func\x94\x93\x94.' <class 'bytes'>
(2)反序列化
pickle.loads(res)() #取出函数名,加括号可以调用函数
#输出
f1
2.在文件中(重点)
import pickle
def func():
print('f1')
(1)序列化
# pickle由于传输的是二进制,所以用b模式
with open('test.pkl', 'wb') as f_w:
pickle.dump(func, f_w)
(2)反序列化
with open('test.pkl', 'rb') as f_r:
func1=pickle.load(f_r)
func1()
#输出:
f1