跳转到主要内容

itertools. 但可序列化。即使在Python 2中。

项目描述

https://img.shields.io/coveralls/mila-udem/picklable-itertools.svg https://travis-ci.org/mila-udem/picklable-itertools.svg?branch=master https://img.shields.io/scrutinizer/g/mila-udem/picklable-itertools.svg https://img.shields.io/badge/license-MIT-blue.svg

picklable-itertools

Python标准库中itertools的重实现,使用可序列化迭代器对象。旨在与Python 2.7和3.4+兼容。还包括picklable_itertools.extras中的某些相关实用工具的可序列化、Python {2, 3} 兼容实现,包括Toolz库的一些函数。

为什么?

  • 因为标准库pickle模块(以及优秀的dill包)不能序列化所有itertools迭代器,至少在Python 2中(至少在Python 3中有些似乎是可序列化的)。

  • 因为这些在itertools中的实例可以简化代码,但由于必须在Python 2和Python 3之间保持可序列化,因此无法使用。我们正在开发的框架Blocks是我们的第一个消费者。我们希望能够序列化长时间运行程序的全部状态以供后续恢复。我们无法使用不可序列化的对象来完成此操作。

哲学

  • 这是一个即插即用的替代品。 很直观。通过标准库 itertools 或内置实现进行测试,以验证行为是否匹配。在 Python 2 和 Python 3 在命名上存在差异时(filterfalseifilterfalsezip_longestizip_longest),我们提供两者。我们还提供了仅在 Python 2 版本的 itertools 中可用的名称(ifilterizip),在 Python 3 中也以它们的内置名称(filterzip)提供,以便于使用。随着新对象被添加到 Python 3 的 itertools 模块中,我们打算添加它们(例如,accumulate 只存在于 Python 3 中,并且可序列化的实现包含在此包中。)

  • 如果可能,优雅地处理内置类型。 列表迭代器等在 Python 2.x 中不可序列化,因此我们提供了替代实现。文件迭代器也得到了透明处理。目前不支持字典迭代器和集合迭代器。picklable_itertools.xrange 可以作为 Python 2 的 xrange/Python 3 的 range 的替代品,其优点是它产生的迭代器在 Python 2 和 3 中都是可序列化的。

  • 过早优化是万恶之源。 这些事物是用 Python 实现的,所以速度显然不是我们的首要关注点。几个更高级的迭代器是通过将更简单的迭代器链起来构建的,这并不是最高效的做法,但大大简化了代码。如果速度(或更浅的对象图)是必要的或所希望的,这些总是可以重新实现的。欢迎提出此类请求的拉取请求。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

picklable-itertools-0.1.1.tar.gz (11.3 kB 查看散列)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面