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 aretains = ...
, 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f44dcee818d2395466b3d1fc2c6a3be2e0a2bea086d0e12d992c518163fcad5e |
|
MD5 | 6d1c9eca82178fce2c975e037a85695e |
|
BLAKE2b-256 | 8adec74e1ca58ad20d910451fd4458226834943840013527a2c94893b11ee89a |
File details
Details for the file rustiter-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: rustiter-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.4.25
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26019b3df51cfb91435a224516e5222c1567781e0197171d415e328bc5ecb088 |
|
MD5 | 42b9a74513105a14b4c80eb6249a19dc |
|
BLAKE2b-256 | 2698b9a0c8334003d48207a7b754442f9ed2d88d62990861b3e03e85cd978059 |