知行编程网知行编程网  2022-11-01 16:30 知行编程网 隐藏边栏  4 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python什么是反序列化?的相关知识,希望可以帮到处于编程学习途中的小伙伴

python的序列化是把变量从内存中变成可存储或传输的过程,反序列化是把变量内容从序列化的对象重新读到内存的过程。方法是:1、导入pickle模块;2、利用pickle中的loads或load函数进行反序列化操作。

python中的反序列化是什么?

我们将使变量从内存中存储或传输的过程称为序列化。

序列化后,序列化后的内容可以写入磁盘或通过网络传输到其他机器。

相反,将序列化对象中的变量内容重新读取到内存中称为反序列化或 unpickling。

例如:大家应该都玩过魔兽,应该知道游戏有存档功能。每次不想玩的时候都可以保存,然后再玩的时候,我们根本不需要重启游戏,读取文件就行了。 .我们现在学习的是面向对象的思想,所以在我们眼里,无论是我们的游戏角色还是游戏中的怪物、装备等,都可以看作是一一对应的对象,简单分析.

角色对象(包含等级、性别、经验值、HP、MP等等属性)

武器对象(包含武器的类型、武器的伤害、武器附加的能力值等等属性)

怪物对象(包含等级、经验值、攻击、怪物类型等等)

于是玩游戏过程变的非常有意思了,创建游戏角色就好像是创建了一个角色对象,拿到武器就好像创建了一个武器对象,遇到的怪物、NPC等等都是对象了。

然后再用学 过的知识进行分析,我们发现对象的数据都是保存在内存中的,应该都知道内存的数据在断电以后是会消失的,但是我们的游戏经过存档以后,就算你关机了几天, 再进入游戏的时候,读取你的存档发现你在游戏中的一切都还在呢,奇怪了,明明内存中的数据已经没有了啊,这是为什么呢?于是再仔细考虑,电脑中有硬盘这个 东西在断电以后保存的数据是不会丢的(要是由于断电导致的硬盘损坏了,没有数据了,哈哈,不在此考虑中)。那么应该很容易的想到这些数据是被保存在硬盘中 了。没错!这就是对象的持久化,也就是我们今天要讲的对象的序列化。那么反序列化就很好理解了就是将存放在硬盘中的信息再读取出来形成对象。

pickle模块提供了四个功能:dumps、dump、loads、load。

dumps和dump都是进行序列化,而loads和load则是反序列化。

>>> import pickle
>>> d=[1,2,3,4]
>>> pickle.dumps(d)
b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'

dumps 将传入变量的值序列化为一个字节,然后可以将其写入磁盘或传输。

转储更一步完成。 dump中可以传入两个参数,一个是需要序列化的变量,一个是需要写入的文件。

f=open('file_test','wb')
>>> d=[1,2,3,4]
>>> pickle.dump(d,f)
>>> f.close()
>>> f=opem('file_test','rb')
 f=open('file_test','rb')
 >>> f.read()
b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'

load 当我们想从磁盘读取一个对象到内存时,可以先将内容读入一个字节,然后使用loads方法反序列化该对象,也可以直接使用load方法直接反序列化一个文件。

>>> d=[1,2,3,4]
>>> r=pickle.dumps(d)
>>> print(r)
b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'
>>> pickle.loads(r)
[1, 2, 3, 4]
>>> d=[1,2,3,4]
>>> f=open('file_test','wb')
>>> pickle.dump(d,f)
>>> f.close()
>>> f=open('file_test','rb')
>>> r=pickle.load(f)
>>> f.close()
>>> print(r)
[1, 2, 3, 4]

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享