Tipe allows you to create constructions similar to pipe operator, where result of a function used as an input of next function
pip install tipe
>>> from tipe import Pipe
>>>
>>> Pipe(2).pipe(lambda x: x + 1).pipe(float).unwrap()
3.0
>>> Pipe([2, 3, 4]) \
... .pipe(len) \
... .pipe(lambda x: x + 1) \
... .pipe(float) \
... .unwrap()
4.0
>>> Pipe(2).pipe(range, 4).pipe(len).unwrap()
2
Equivalent for examples above would be
>>> float(2+1)
3.0
>>> float(len([2, 3, 4]) + 1)
4.0
>>> len(range(2, 4))
2
To use .pipe()
on a value wrap it with Pipe
class
>>> Pipe(2)
Pipe(2)
Pass function to execute on Pipe
value and additional params for it. Wraps function result in Pipe
and returns it
Like Pipe.pipe()
but does not change the value inside Pipe
. May be useful for debugging purposes
>>> Pipe(2).pipe(lambda x: x ** x).check(print).pipe(float).unwrap()
4
4.0
Returns value from Pipe
For convenience you can use P
as short version of Pipe
and short versions of the methods:
p
:pipe
c
:check
u
:unwrap
tipe
tries its best to stay typesafe, so every function knows what exactly what it returns as long as it is inferable from arguments