新聞中心
大家好我是費老師,相信不少讀者朋友們都在Python?中利用pickle?進行過序列化操作,而所謂的序列化,指的是將程序運行時在內(nèi)存中產(chǎn)生的變量對象,轉(zhuǎn)換為二進制類型的易存儲可傳輸數(shù)據(jù)的過程,相反地,從序列化結(jié)果解析還原為Python變量就叫做反序列化。

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|網(wǎng)站維護|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋成都封陽臺等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。
通常我們都是用標(biāo)準(zhǔn)庫pickle?進行這項操作,但其功能單一,且針對很多常見的Python?對象如lambda?函數(shù)無法進行序列化。而今天費老師我要給大家介紹的庫dill?就可以看作增強版的pickle。
使用dill實現(xiàn)更豐富的序列化/反序列化操作
作為第三方庫,我們使用pip install dill?完成安裝后,就可以使用它來代替pickle了:
基礎(chǔ)使用
dill?的基礎(chǔ)使用與pickle?一樣,使用dump/dumps?進行序列化操作,load/loads進行反序列化操作,下面是一些基本的例子,我們對一些常見的對象進行序列化/反序列化操作:
import dill
import numpy as np
demo_int = 999
demo_float = 0.99
demo_dict = {'a': 999}
demo_array = np.random.rand(2, 2)
# 序列化并寫出到pkl文件
with open('./demo.pkl', 'wb') as d:
dill.dump(
[demo_int, demo_float, demo_dict, demo_array],
d
)
從寫出的demo.pkl文件中還原對象:
# 序列化并寫出到pkl文件
with open('./demo.pkl', 'rb') as d:
restore_demo = dill.load(d)
restore_demo
增強功能
看完了dill?的基礎(chǔ)用法,下面我們來介紹其相對于pickle進行增強的特殊功能:
對lambda函數(shù)進行序列化
pickle?可以對常規(guī)的函數(shù)進行序列化,但針對lambda?函數(shù)則會報錯,而使用dill就可以正常序列化:
保存解釋器的會話狀態(tài)
dill?中另一項很實用的功能則是其支持將當(dāng)前解釋器的會話狀態(tài)整個打包保存和還原,譬如下面的例子,利用dill.dump_session()?保存當(dāng)前解釋器會話狀態(tài),在另一個獨立的py?腳本中再利用dill.load_session()就可以一步到位全部還原:
從序列化結(jié)果中還原源碼
dill?中另一個很強大的功能是其source?模塊可以從序列化結(jié)果中還原對象的源碼,這在序列化的對象為函數(shù)時非常實用(注意目前此功能不可以在ipykernel?中執(zhí)行,因此下面的例子使用魔術(shù)命令直接執(zhí)行外部py腳本):
除此之外,dill?還有很多其他豐富的功能,感興趣的讀者朋友可以前往其官方文檔(https://dill.readthedocs.io/en/latest/dill.html)了解更多。
新聞標(biāo)題:Dill:Python中增強版的pickle
URL分享:http://m.fisionsoft.com.cn/article/ccoecji.html


咨詢
建站咨詢
