本文示例代码已上传至我的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)了解更多。


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

最新文章

  1. WebLogic集群体系架构
  2. ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
  3. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
  4. web及H5 的链接测试
  5. JavaScript 的使用基础总结③
  6. NHibernate从入门到精通系列(2)——NHibernate环境与结构体系
  7. Dynamics CRM 注册插件dll到GAC
  8. C# IIS站点管理--Microsoft.Web.Administration.dll
  9. C语言之二维数组与指针
  10. finalize方法的使用
  11. 使用epoll实现聊天室功能,同时比较epoll和select的异同
  12. 19JDBC初体验
  13. logical_backup: expdp/impdp
  14. Vmware ESXi 的虚拟机的开机自启动
  15. 关于一台机器部署多个tomcat的小记
  16. Magento EAV模型
  17. 【BZOJ1443】游戏(二分图匹配,博弈论)
  18. LeetCode (226):Invert Binary Tree 递归实现
  19. 打造移动应用与游戏安全防线,腾讯WeTest安全服务全线升级
  20. Flume自定义拦截器(Interceptors)或自带拦截器时的一些经验技巧总结(图文详解)

热门文章

  1. BigDecimal加减乘除及setScale的用法小结
  2. windows下docker部署报错
  3. 扩展-PageHelper分页插件
  4. VT-x is not available (VERR_VMX_NO_VMX).无法打开虚拟机,无法新建64位虚拟机
  5. APISpace万券齐发,API采购大放价
  6. Josephus问题(Ⅰ)
  7. 07 MySQL_SQL语言分类
  8. day04 Java_分支_循环
  9. java 桥接方法
  10. springmvc异常处理解析#ExceptionHandlerExceptionResolver