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'))