FunctionalPy
ALPHA: APIs can change dramatically without notice.
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. FunctionalPy exists to change that.
You get this 🔥:
result = (Seq([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 functionalpy
Usage
from functionalpy import Seq
result = (Seq([1, 2])
.filter(lambda x: x % 2 == 0)
.map(lambda x: x * 2)
.to_list()
)
assert result == [4]
Prior art
FunctionalPy 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 at the current level of maturity,flupyis likely a better library. - 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 |
Metadata
Release files for functionalpy 0.17.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| functionalpy-0.17.0.tar.gz | 30.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| functionalpy-0.17.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.3 kB
Release files / functionalpy-0.17.0.tar.gz
| Download URL | functionalpy-0.17.0.tar.gz |
|---|---|
| Size | 30.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
043b5a29eac96759118b35be146354479e1d9f0e2341aae11e5d44f369e38ce2
|
|
BLAKE2b-256 checksum How to use checksums |
ec17d65c5cbdf83ab7debf3c9c8bf17a2d02371fa45ed851b8a69671d62096fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|
Release files / functionalpy-0.17.0-py3-none-any.whl
| Download URL | functionalpy-0.17.0-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6b4d53478890f20ac6efb45336196665de049f3f589cd9fa2c5bab15142cfe07
|
|
BLAKE2b-256 checksum How to use checksums |
ae57c5cee2fb339f09f1d5562ce1ea23df8065564c82ea1f6eeb9dcefa4b5ff9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|