Iterator pipeline wrapper in the spirit of Martin Fowler's Collection Pipeline pattern
Project description
IterPipe
Introduction
This is a wrapper for the iterator functions in the Python Standard Library to make it easier and more readable to chain them together into a pipeline.
It is a way to implement Martin Fowler's Collection Pipeline pattern (https://martinfowler.com/articles/collection-pipeline/) with Python's standard iterator functions.
To illustrate the concept, we will perform the following sequence of steps in each example:
- Start with a
rangeiterator, - Then
filterto pass only the values larger or equal to 6 - Then square each number from step 2, using the
mapfunction - Then
sumthe squares from step 3
Here is the code, using intermediate variables, without chaining.
def filter_func(x):
# Simple function used in "filter" examples below
return x >= 6
def squared(x):
# Simple function to square it's input. Used in "map" below.
return x * x
input = range(10)
intermediate_1 = filter(filter_func, input)
# Apply squared function to each value returned by intermediate_1 iterator
intermediate_2 = map(squared, intermediate_1)
output = sum(intermediate_2)
print("Output without chaining: {output}".format(output=output))
Here is the same code, using regular Python syntax chaining. Note that execution happens inside-out, with the last operation (sum) appearing first.
def filter_func(x):
return x >= 6
def squared(x):
# Simple function to square it's input. Used in "map" below.
return x * x
input = range(10)
output = sum(map(squared, filter(filter_func, input)))
print("Output with regular Python chaining: {output}".format(output=output))
And here is the same code again, using the IterPipe wrapper. Note that it reads in the same order as execution happens.
from IterPipe import IterPipe
def filter_func(x):
return x >= 6
def squared(x):
# Simple function to square it's input. Used in "map" below.
return x * x
input = range(10)
output = (IterPipe(input)
.filter(filter_func)
.map(squared)
.sum()
)
print("Output with IterPipe chaining: {output}".format(output=output))
The IterPipe wrapper supports the following functions that operate on iterators from builtins, itertools and functools.
- accumulate
- all
- any
- chain
- combinations
- combinations_with_replacement
- compress
- cycle
- dict
- dropwhile
- enumerate
- filter
- filterfalse
- frozenset
- groupby
- islice
- iterator
- list
- map
- max
- min
- next
- permutations
- product
- reduce
- set
- sorted
- starmap
- sum
- takewhile
- tee
- tuple
- zip
- zip_longest
Installation
Works with Python 3.4 or later.
pip install -U IterPipe
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file IterPipe-0.0.3.tar.gz.
File metadata
- Download URL: IterPipe-0.0.3.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.20.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d92661893381e790dc615461f2e9645e5a10e4c2a092b4a97dbfe0bc06425c11
|
|
| MD5 |
a6540da7f2866479f08f178617539731
|
|
| BLAKE2b-256 |
691f47519508da0cc1457b15521059bd2918e639d2179563c51572bf9b702315
|
File details
Details for the file IterPipe-0.0.3-py3-none-any.whl.
File metadata
- Download URL: IterPipe-0.0.3-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.20.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc25fd0688ce4ca457c5723941920283104ad2b1e9c37dab8869cd67b843c5c0
|
|
| MD5 |
e4d1a5aa63bf37411726150e62f7f94f
|
|
| BLAKE2b-256 |
f42001237003d55ca34082271cb29e4dd895b6bef1b348cf55b79805ce9589b2
|