当前位置: 首页 > 面试题库 >

Python:为什么要泡菜?

宋臻
2023-03-14
问题内容

我一直在使用pickle感到非常高兴,然后我看到了这篇文章:不要为您的数据腌制

进一步阅读似乎是:

  • 泡菜慢
  • 泡菜不安全
  • 泡菜不是人类可读的
  • 泡菜不是与语言无关的

我已将数据保存为JSON,但我想了解最佳做法:

考虑到所有这些问题,您何时会使用泡菜?需要使用哪种特定情况?


问题答案:

Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。但是,这也使它可以序列化几乎所有Python对象,而无需任何样板甚至白名单/黑名单(在常见情况下)。对于某些用例,这是非常理想的:

  • 快速简便的序列化,例如用于暂停和恢复长时间运行但简单的脚本。这里的任何问题都无关紧要,您只想按原样转储程序的状态并在以后加载它。
  • 将任意Python数据发送到其他进程或计算机,如中所示multiprocessing。安全问题 可能 适用(但大多数情况下没有),普遍性是绝对必要的,并且人们不必阅读它。

在其他情况下,没有任何缺点足以证明将您的内容映射到JSON或其他限制性数据模型的合理性。也许您不希望需要人类可读性/安全性/跨语言兼容性,或者您可能不需要。请记住,您将不需要它。使用JSON是正确的选择,但是正确并不总是那么好。

您会注意到,我完全忽略了“缓慢”的缺点。那是因为它在某种程度上具有误导性:对于完全适合JSON模型(字符串,数字,数组,映射)的数据,Pickle的速度确实确实较慢,但是如果您的数据如此,则无论如何,您都应使用JSON。如果您的数据不太可能(这样),则还需要考虑将对象转换为JSON数据所需的自定义代码,以及将JSON数据重新转换为您所需的自定义代码对象。它增加了工程工作量和运行时开销,必须根据具体情况进行量化。



 类似资料:
  • 问题内容: 我从节点启动这是来自node.js README.md 先决条件(仅Unix): 想知道为什么node.js需要Python?它是否在其API下使用Python 问题答案: Node.js使用GYP构建-GYP —用Python编写的跨平台构建工具。Python中还实现了其他一些构建步骤。因此,从源代码构建节点需要Python。 但是您还需要Python来构建本机插件。

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:

  • 本文向大家介绍python 为什么说eval要慎用,包括了python 为什么说eval要慎用的使用技巧和注意事项,需要的朋友参考一下 eval前言 当内存中的内置模块含有os的话,eval同样可以做到命令执行: 当然,eval只能执行Python的表达式类型的代码,不能直接用它进行import操作,但exec可以。如果非要使用eval进行import,则使用__import__: 在实际的代码中

  • 本文向大家介绍为什么要用 redis ?为什么要用缓存?相关面试题,主要包含被问及为什么要用 redis ?为什么要用缓存?时的应答技巧和注意事项,需要的朋友参考一下 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓

  • 问题内容: 我已经在多个地方多次看到过这种情况,但是从未找到令人满意的解释来说明为什么会这样。 因此,希望这里会介绍一个。为什么我们(至少通常)不使用和? 编辑:我看到人们以为这个问题与Web服务器有关,但事实并非如此。我可以理解为什么传递给未经处理的字符串可能很糟糕。在非Web应用程序中不好吗? 问题答案: 通常有更清晰,更直接的方法来获得相同的效果。如果构建复杂的字符串并将其传递给,则代码将难

  • 问题内容: 在工作中,我们曾经以非常标准的OO方式对Python进行编程。最近,有几个人加入了实用的潮流行列。现在,他们的代码包含更多的lambda,映射和简化。我了解功能语言对并发性有好处,但对Python进行功能编程真的对并发有所帮助吗?我只是想了解如果我开始使用Python的更多功能,将会得到什么。 问题答案: 编辑 :由于没有提供更多的解释/示例,我被注释中的任务(部分地,似乎是由FP的狂