代码改变世界

Python反序列化 pickle

2018-05-02 16:36  钱先生  阅读(197)  评论(0编辑  收藏  举报
 1 # 若需要处理更复杂的数据, 用pickle. pickle只有在Python里能用, 其它语言不行.
 2 # 序列化.
 3 import pickle
 4 def sayhi(name):
 5     print('hello', name)
 6 
 7 f = open('test.text', 'wb')
 8 
 9 info = {
10     'name': 'alex',
11     'age': 22,
12     'func': sayhi
13 }
14 
15 f.write(pickle.dumps(info))  # pickle会默认转换成二进制,所以读取方式应该是wb而不是w.
16 f.close()
17 
18 
19 # 反序列化
20 import pickle
21 def sayhi(name):
22     print('hello2', name)  # 反序列化一个不同的函数(名字一样, 方法体不一样),也可以. ? 如果没有序列化过, 为什么可以反序列化?
23 
24 f = open('test.text', 'rb')
25 
26 
27 data = pickle.loads(f.read())  # 反序列化. 这样会出错, 因为函数sayhi用完就释放了, 内存地址就不存在了. 所以这
28 print(data['func']('Alex'))