python的序列化是什么意思_python什么是反序列化?
python的序列化是把變量從內存中變成可存儲或傳輸的過程,反序列化是把變量內容從序列化的對象重新讀到內存的過程。方法是:1、導入pickle模塊;2、利用pickle中的loads或load函數進行反序列化操作。
我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化。
序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即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將所傳入的變量的值序列化為一個bytes,然后,就可以將這個bytes寫入磁盤或者進行傳輸。
而dump則更加一步到位,在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.'
loads當我們要把對象從磁盤讀到內存時,可以先把內容讀到一個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]
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python的序列化是什么意思_python什么是反序列化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python生成静态html_Pytho
- 下一篇: sgolayfilt函数_Matlab中