iterpy
Project description
iterpy
Python has implemented map
, filter
etc. as functions, rather than methods on a sequence. This makes the result harder to read and iterators less used than they could be. iterpy exists to change that.
You get this 🔥:
from iterpy import Iter
result = Iter([1,2,3]).map(multiply_by_2).filter(is_even)
Instead of this:
sequence = [1,2,3]
multiplied = [multiply_by_2(x) for x in sequence]
result = [x for x in multiplied if is_even(x)]
Or this:
result = filter(is_even, map(multiply_by_2, [1,2,3]))
Install
pip install iterpy
Usage
from iterpy import Iter
result = (Iter([1, 2])
.filter(lambda x: x % 2 == 0)
.map(lambda x: x * 2)
.to_list()
)
assert result == [4]
Prior art
iterpy stands on the shoulders of Scala, Rust etc.
Other Python projects have had similar ideas:
- PyFunctional has existed for 7+ years with a comprehensive feature set. It is performant, with built-in lineage and caching. Unfortunately, this makes typing non-trivial, with a 4+ year ongoing effort to add types.
- flupy is highly similar, well typed, and mature. I had some issues with
.flatten()
not being type-hinted correctly, but but your mileage may vary. - Your library here? Feel free to make an issue if you have a good alternative!
Contributing
Conventions
Philosophy
- Make it work: Concise syntax borrowed from Scala, Rust etc.
- Make it right: Fully typed, no exceptions
- Make it fast:
- Concurrency through
.pmap
- (Future): Caching
- (Future): Refactor operations to use generators
- Concurrency through
- Keep it simple: No dependencies
API design
As a heuristic, we follow the APIs of:
In cases where this conflicts with typical python implementations, the API should be as predictable as possible for Python users.
Devcontainer
- Install Orbstack or Docker Desktop. Make sure to complete the full install process before continuing.
- If not installed, install VSCode
- Press this link
- Complete the setup process
- Done! Easy as that.
💬 Where to ask questions
Type | |
---|---|
🚨 Bug Reports | GitHub Issue Tracker |
🎁 Feature Requests & Ideas | GitHub Issue Tracker |
👩💻 Usage Questions | GitHub Discussions |
🗯 General Discussion | GitHub Discussions |
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
iterpy-1.7.0.tar.gz
(36.1 kB
view details)
Built Distribution
iterpy-1.7.0-py3-none-any.whl
(10.9 kB
view details)
File details
Details for the file iterpy-1.7.0.tar.gz
.
File metadata
- Download URL: iterpy-1.7.0.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8286da1ff9af2d77a2a63a4b1677fd09a4d610d7a8e6b558e576570e39425321 |
|
MD5 | defdd6cc439d3ebaffc9008598a8f646 |
|
BLAKE2b-256 | c74b9796f89d9fec11c7a3ba0a2413cae4b6bb5fe6cb0e7ab810d55c36f8606f |
File details
Details for the file iterpy-1.7.0-py3-none-any.whl
.
File metadata
- Download URL: iterpy-1.7.0-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76865c18a7c302decaab63381027f0875e1981cf299fbd7ba2285ecb8376ffee |
|
MD5 | 9dd5e0990991f65c6512ba39c17fb118 |
|
BLAKE2b-256 | 3fa02ba6e90e58f5f10555714ef1587c7f1ba4e43537d985fa734be7d5ee53cb |