2024-05-14 17:03:44 发布
网友
我一直在用pickle,非常高兴,然后我看到了这篇文章:Don't Pickle Your Data
再往下看似乎是:
我已切换到将数据保存为JSON,但我想了解最佳实践:
考虑到这些问题,你什么时候会用泡菜?哪些具体情况需要使用它?
Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。然而,这也使它能够序列化几乎所有的Python对象,而不需要任何样板文件,甚至不需要白/黑列表(在一般情况下)。对于某些用例来说,这是非常理想的:
multiprocessing
在其他情况下,这些缺点都不足以证明将内容映射到JSON或其他限制性数据模型的工作是正确的。也许你不需要人的可读性/安全性/跨语言兼容性,或者你可以不需要。记住,你不需要它。使用JSON是正确的™ 但权利并不总是等同于善。
你会注意到我完全忽略了“慢”的缺点。这是因为它有部分误导性:Pickle对于完全符合JSON模型(字符串、数字、数组、映射)的数据确实较慢,但是如果您的数据是这样的,那么您应该出于其他原因使用JSON。如果您的数据不是这样的(很可能),您还需要考虑将对象转换为JSON数据所需的自定义代码,以及将JSON数据转换回对象所需的自定义代码。它同时增加了工程工作和运行时开销,这些开销必须根据具体情况进行量化。
Pickle具有方便的优点——它可以在不做额外工作的情况下序列化任意对象图,并且可以在相当广泛的Python类型上工作。尽管如此,在新代码中使用Pickle对我来说是不寻常的。使用JSON要干净得多。
我通常既不使用Pickle,也不使用JSON,但是MessagePack它既安全又快速,并且生成小尺寸的序列化数据。
另一个优势是可以与用其他语言编写的软件交换数据(当然对于JSON也是如此)。
Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。然而,这也使它能够序列化几乎所有的Python对象,而不需要任何样板文件,甚至不需要白/黑列表(在一般情况下)。对于某些用例来说,这是非常理想的:
multiprocessing
。安全问题可能适用(但大多数情况下不适用),通用性是绝对必要的,人类不必阅读它。在其他情况下,这些缺点都不足以证明将内容映射到JSON或其他限制性数据模型的工作是正确的。也许你不需要人的可读性/安全性/跨语言兼容性,或者你可以不需要。记住,你不需要它。使用JSON是正确的™ 但权利并不总是等同于善。
你会注意到我完全忽略了“慢”的缺点。这是因为它有部分误导性:Pickle对于完全符合JSON模型(字符串、数字、数组、映射)的数据确实较慢,但是如果您的数据是这样的,那么您应该出于其他原因使用JSON。如果您的数据不是这样的(很可能),您还需要考虑将对象转换为JSON数据所需的自定义代码,以及将JSON数据转换回对象所需的自定义代码。它同时增加了工程工作和运行时开销,这些开销必须根据具体情况进行量化。
Pickle具有方便的优点——它可以在不做额外工作的情况下序列化任意对象图,并且可以在相当广泛的Python类型上工作。尽管如此,在新代码中使用Pickle对我来说是不寻常的。使用JSON要干净得多。
我通常既不使用Pickle,也不使用JSON,但是MessagePack它既安全又快速,并且生成小尺寸的序列化数据。
另一个优势是可以与用其他语言编写的软件交换数据(当然对于JSON也是如此)。
相关问题 更多 >
编程相关推荐