溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python反序列化指的是什么

發(fā)布時間:2020-07-07 14:27:24 來源:億速云 閱讀:134 作者:清晨 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)python反序列化指的是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

python的序列化是把變量從內(nèi)存中變成可存儲或傳輸?shù)倪^程,反序列化是把變量內(nèi)容從序列化的對象重新讀到內(nèi)存的過程。方法是:1、導(dǎo)入pickle模塊;2、利用pickle中的loads或load函數(shù)進行反序列化操作。

python反序列化指的是什么

我們把變量從內(nèi)存中變成可存儲或傳輸?shù)倪^程稱之為序列化。

序列化之后,就可以把序列化后的內(nèi)容寫入磁盤,或者通過網(wǎng)絡(luò)傳輸?shù)絼e的機器上。

反過來,把變量內(nèi)容從序列化的對象重新讀到內(nèi)存里稱之為反序列化,即unpickling。

舉例:大家應(yīng)該都玩過魔獸爭霸,應(yīng)該知道該游戲有一個存檔的功能,我每次不想玩得時候就可以存檔,然后再玩得時候我們根本不需要重新開始玩,只需要讀檔就可以了。我們現(xiàn)在學(xué)習(xí)的事面向?qū)ο蟮乃枷?,那么在我們眼中不管是我們的游戲角色還是游戲中的怪物、裝備等等都可以看成是 一個個的對象,進行簡單的分析。

角色對象(包含等級、性別、經(jīng)驗值、HP、MP等等屬性)
武器對象(包含武器的類型、武器的傷害、武器附加的能力值等等屬性)
怪物對象(包含等級、經(jīng)驗值、攻擊、怪物類型等等)
于是玩游戲過程變的非常有意思了,創(chuàng)建游戲角色就好像是創(chuàng)建了一個角色對象,拿到武器就好像創(chuàng)建了一個武器對象,遇到的怪物、NPC等等都是對象了。
然后再用學(xué) 過的知識進行分析,我們發(fā)現(xiàn)對象的數(shù)據(jù)都是保存在內(nèi)存中的,應(yīng)該都知道內(nèi)存的數(shù)據(jù)在斷電以后是會消失的,但是我們的游戲經(jīng)過存檔以后,就算你關(guān)機了幾天, 再進入游戲的時候,讀取你的存檔發(fā)現(xiàn)你在游戲中的一切都還在呢,奇怪了,明明內(nèi)存中的數(shù)據(jù)已經(jīng)沒有了啊,這是為什么呢?于是再仔細(xì)考慮,電腦中有硬盤這個 東西在斷電以后保存的數(shù)據(jù)是不會丟的(要是由于斷電導(dǎo)致的硬盤損壞了,沒有數(shù)據(jù)了,哈哈,不在此考慮中)。那么應(yīng)該很容易的想到這些數(shù)據(jù)是被保存在硬盤中 了。沒錯!這就是對象的持久化,也就是我們今天要講的對象的序列化。那么反序列化就很好理解了就是將存放在硬盤中的信息再讀取出來形成對象。

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將所傳入的變量的值序列化為一個bytes,然后,就可以將這個bytes寫入磁盤或者進行傳輸。

而dump則更加一步到位,在dump中可以傳入兩個參數(shù),一個為需要序列化的變量,另一個為需要寫入的文件。

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

loads當(dāng)我們要把對象從磁盤讀到內(nèi)存時,可以先把內(nèi)容讀到一個bytes,然后用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]

關(guān)于python反序列化指的是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI