piping between functions in Python
Project description
Lead Pipe allows values to be piped from one function to the next without nesting the calls. For example, the following blocks of code are equivalent.
a = foo(bar(baz(8, 2), a=3), 4)
from lead_pipe import Pipe
a = ~Pipe(8)(baz, 2)(bar, a=3)(foo, 4)
Basic Use
Creating a Pipe
Pipelines begin with a base value passed to the Pipe constructor.
>>> from lead_pipe import Pipe
>>> Pipe(3)
Pipe(3)
>>> Pipe('a')
Pipe('a')
Piping Results
Each instance of Pipe is callable and takes any number of arguments (at least one). The first argument is a function that gets called with the pipeline’s value followed by the additional arguments and keyword arguments, if any.
>>> Pipe(3)(lambda x: x + 0.5)(lambda x: x ** 2)(int)('{} - {x} + {}'.format, 1, x=8)(eval)
Pipe(5)
Obtaining Result
Once your pipeline is finished, you can retrieve the result with the tilde (~) operator or through the pipe’s ‘value’ attribute.
>>> ~Pipe(11)
11
>>> Pipe('foo').value
'foo'
>>> ~Pipe(2)(pow, 3)(str)
'8'
Advanced Features
Intermediate Pipes
Since each step along the pipeline is its own instance of Pipe, an intermediate pipe can be saved to pipe to multiple functions.
>>> p = Pipe(4)(range)(zip, range(2, 6))
>>> p
Pipe([(0, 2), (1, 3), (2, 4), (3, 5)])
>>> p(dict).value[2]
4
>>> ~p(lambda x: x[1][1])
3
Apply
Sometimes a function may return another function rather than a value to be piped to another function. Apply is a helper function that continues the pipeline with the function returned.
>>> from lead_pipe import apply
>>> ~Pipe('{} foo{a} {}'.format)(apply, 'bar', 'baz', a=3)
'bar foo3 baz'
Reflect
Sometimes one may want to call a member function of a value in the pipeline. One way would be to pipe the value to getattr then to apply, but the reflect function is the combination of the two.
>>> from lead_pipe import reflect
>>> ~Pipe({'a': 1, 'b': 2})(reflect, 'get', 'a')
1
In this specific example, one could pipe the dictionary to dict.get, but reflect is more general.
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
File details
Details for the file lead_pipe-0.2.1.tar.gz
.
File metadata
- Download URL: lead_pipe-0.2.1.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 38c07bf0d62fd10a2ccbe376ceb3d1882c155034ae48af80770d6b58ee1da4b3 |
|
MD5 | 6a686903eab30c37e1eb9603534b27fe |
|
BLAKE2b-256 | 28b7ddcb763e05e753510551d755d826fa542b65e9e474b058ce338105f771b6 |