Skip to main content

Rust iterator utilities for Python

Project description

Rustiter

Rust-inspired iterator utilities for Python. This library implements most of the functions from the Rust Iterator trait.

Why

I'm a big fan of chaining function calls, but Python's functional programming tools can be cumbersome. No one really wants to use the built-in map, filter, and reduce functions.

I previously experimented with simpleufcs, which allows for chainable function calls in Python.

This library offers an alternative: while it doesn't provide full UFCS (Uniform Function Call Syntax), it performs slightly better and brings many useful functions from Rust’s iterator design, such as take, flat_map, and more. If you're familiar with Rust and not too concerned about performance, you'll likely enjoy using this.

Installation

pip install rustiter

Example

Here are some commonly used functions:

from rustiter import rter
ret = (
    rter(range(10))
    .filter(lambda x: x % 2 == 0)
    .map(lambda x: x + 1)
    .take(3)
    .collect()
)
assert ret == [1, 3, 5]
assert rter(range(10)).reduce(lambda x, y: x + y, 0) == 45

Additional Information: Every function includes a doctest to demonstrate its usage.

Mutability

The mutability of Python's iterator is not ideal. Therefore, I marked the mutability of the functions as follows:

  • [Mut]: The iterator may be modified after this operation. If there's not a retains = ..., the rest elements is undefined.
  • [UnMut]: The iterator will not be modified.
  • [Consume]: The iterator may be consumed after this operation. Note that this does not mean the iterator will become empty; there may still be elements in it. This means that you should not use this iterator again.

benchmark

Windows 11, python 3.12.7

Name (time in ns) Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations
test_normal 524.9999 (1.0) 26,137.4998 (1.0) 600.2414 (1.0) 247.7502 (1.0) 575.0001 (1.0) 37.5001 (1.0) 2947;10025 1,665.9964 (1.0) 169492 8
test_rustiter 1,399.9997 (2.67) 251,400.0007 (9.62) 1,669.7782 (2.78) 2,722.4341 (10.99) 1,599.9995 (2.78) 100.0008 (2.67) 107;1465 598.8819 (0.36) 31646 1

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rustiter-0.2.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

rustiter-0.2.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file rustiter-0.2.0.tar.gz.

File metadata

  • Download URL: rustiter-0.2.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.4.25

File hashes

Hashes for rustiter-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f44dcee818d2395466b3d1fc2c6a3be2e0a2bea086d0e12d992c518163fcad5e
MD5 6d1c9eca82178fce2c975e037a85695e
BLAKE2b-256 8adec74e1ca58ad20d910451fd4458226834943840013527a2c94893b11ee89a

See more details on using hashes here.

File details

Details for the file rustiter-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rustiter-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 26019b3df51cfb91435a224516e5222c1567781e0197171d415e328bc5ecb088
MD5 42b9a74513105a14b4c80eb6249a19dc
BLAKE2b-256 2698b9a0c8334003d48207a7b754442f9ed2d88d62990861b3e03e85cd978059

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page