Dill:Python中增强版的pickle

开发
通常我们都是用标准库pickle进行这项操作,但其功能单一,且针对很多常见的Python对象如lambda函数无法进行序列化。而今天我要给大家介绍的库dill就可以看作增强版的pickle。

大家好我是费老师,相信不少读者朋友们都在Python​中利用pickle​进行过序列化操作,而所谓的序列化,指的是将程序运行时在内存中产生的变量对象,转换为二进制类型的易存储可传输数据的过程,相反地,从序列化结果解析还原为Python变量就叫做反序列化。

通常我们都是用标准库pickle​进行这项操作,但其功能单一,且针对很多常见的Python​对象如lambda​函数无法进行序列化。而今天费老师我要给大家介绍的库dill​就可以看作增强版的pickle。

使用dill实现更丰富的序列化/反序列化操作

作为第三方库,我们使用pip install dill​完成安装后,就可以使用它来代替pickle了:

基础使用

dill​的基础使用与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​的基础用法,下面我们来介绍其相对于pickle进行增强的特殊功能:

对lambda函数进行序列化

pickle​可以对常规的函数进行序列化,但针对lambda​函数则会报错,而使用dill就可以正常序列化:

图片

保存解释器的会话状态

dill​中另一项很实用的功能则是其支持将当前解释器的会话状态整个打包保存和还原,譬如下面的例子,利用dill.dump_session()​保存当前解释器会话状态,在另一个独立的py​脚本中再利用dill.load_session()就可以一步到位全部还原:

图片

从序列化结果中还原源码

dill​中另一个很强大的功能是其source​模块可以从序列化结果中还原对象的源码,这在序列化的对象为函数时非常实用(注意目前此功能不可以在ipykernel​中执行,因此下面的例子使用魔术命令直接执行外部py脚本):

图片

除此之外,dill​还有很多其他丰富的功能,感兴趣的读者朋友可以前往其官方文档(https://dill.readthedocs.io/en/latest/dill.html)了解更多。

责任编辑:赵宁宁 来源: Python大数据分析
相关推荐

2011-09-15 14:00:52

IOS应用SpoolInstapaper

2023-09-03 19:43:46

htmxJavaScript网络

2011-01-05 11:12:34

C++

2013-05-15 09:14:01

2021-01-27 10:01:46

MySQL数据库SQLX

2011-05-26 17:55:08

2009-01-05 10:30:23

赛门铁克Veritas数据中心

2010-08-25 10:42:20

GroovyGroovy++

2009-12-29 14:18:43

ADO.NET2.0

2023-05-10 08:17:22

合并事件推送

2015-09-23 11:27:20

Office 2016ISO镜像微软

2023-05-30 14:59:41

人工智能工具数字化

2013-08-20 17:46:43

通达OA

2023-04-06 08:27:47

SidecarSet容器

2013-10-09 14:57:41

通达oa

2023-04-04 07:25:46

KubernetesOpenKruise

2012-08-28 13:37:30

2013-10-15 14:40:51

通达OA

2022-10-08 08:15:55

GScriptGo 语言
点赞
收藏

51CTO技术栈公众号