本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

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

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

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

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

2.1 基础使用

  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

2.2 增强功能

  看完了dill的基础用法,下面我们来介绍其相对于pickle进行增强的特殊功能:

2.2.1 对lambda函数进行序列化

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

2.2.2 保存解释器的会话状态

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

2.2.3 从序列化结果中还原源码

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

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


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札142)dill:Python中增强版的pickle的更多相关文章

  1. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  2. (数据科学学习手札126)Python中JSON结构数据的高效增删改操作

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...

  3. (数据科学学习手札136)Python中基于joblib实现极简并行计算加速

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在日常使用Python进行各种数据计算 ...

  4. (数据科学学习手札53)Python中tqdm模块的用法

    一.简介 tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍. 二.基本 ...

  5. (数据科学学习手札54)Python中retry的简单用法

    一.简介 retry是一个用于错误处理的模块,功能类似try-except,但更加快捷方便,本文就将简单地介绍一下retry的基本用法. 二.基本用法 retry: 作为装饰器进行使用,不传入参数时功 ...

  6. (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...

  7. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  8. (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. (数据科学学习手札118)Python+Dash快速web应用开发——特殊部件篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

随机推荐

  1. Spring Boot 整合 minio(一步到位)

    按照这个步骤来,宝贝保你一步到位 一.minio版本安装:这里我安装的新版本 新版本安装 # docker 下载镜像 docker pull minio/minio # 安装镜像 docker run ...

  2. vue封装原生的可预览裁剪上传图片插件H5,PC端都可以使用

    思路:1.先做出一个上传的图片的上传区 <!-- 上传区 --> <label for="fileUp"> <div class="upBo ...

  3. .NET GC工作流程

    前言 在上文[如何获取GC的STW时间]一文中,我们聊到了如何通过监听GC发出的诊断事件来计算STW时间.里面只简单的介绍了几种GC事件和它的流程. 群里就有小伙伴在问,那么GC事件是什么时候产生的? ...

  4. Re:用webpack从零开始的vue-cli搭建'生活'

    有了vue-cli的帮助,我们创建vue的项目非常的方便,使用vue create然后选择些需要的配置项就能自动帮我们创建配置好的webpack项目脚手架了,实在是'居家旅行'必备良药.这次借着学习w ...

  5. 09 MySQL_SQL日期函数和聚合函数

    日期相关的函数 seclect 'helloworld'; 1. 获取当前时间 now(); select now(); 2.获取当前的日期 curdate(); select curdate(); ...

  6. Str 真题解(置换)

    目录 题面 置换 这里没有群论 置换 置换的乘法(复合) 置换乘法的单位元 置换乘法的结合律 置换快速幂 置换求乘法逆 真题解 一种可能的代码实现 关于循环节做法 题面 对于字符串 \(s\) 定义一 ...

  7. MySQL sql优化(摘抄自文档)

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  8. mac 无任何来源选项

    终端执行命令 sudo spctl --master-disable

  9. 如何给MySQL添加自定义语法 ?

    目录 1 背景 2 新增关键词(token) 3 新增语法 4 类似于PT_partition添加对应的数据结构global_partition_clause 1 背景 MySQL语法解析器用的bis ...

  10. CSP-J2021 题解

    分糖果 题意 选择L~R中的某个数 , 使得x mod k的结果最大. 思路 分两种情况考虑: 若 L 和 R 对 K 取模后在同一区间,则必然在 x=R 位置取到最大值: 否则 L~R 必然跨越多个 ...