API reference¶
- calls.raises(__e: BaseException) → Callable[[...], Any][source]¶
Create a callable which raises the given exception.
The return value is marked
Any
so its signature fits anywhere a callable is needed.Example
>>> f = raises(ValueError("foo")) ... >>> f() # any arguments are accepted Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: foo
Note
The resulting callable is picklable if the given value is.
- calls.always(__v: calls.S) → Callable[[...], calls.S][source]¶
Create a callable which always returns the same value
Example
>>> f = always(4) ... >>> f() # any arguments are accepted 4
Note
The resulting callable is picklable if the given value is.
- calls.identity(__v: calls.S) → calls.S[source]¶
Pass the given value unmodified
Example
>>> identity(4) 4 >>> identity("foo") "foo"
- calls.flip(__f: calls.BinaryFunction[calls.Q, calls.R, calls.S]) → calls.BinaryFunction[calls.R, calls.Q, calls.S][source]¶
Flip the two arguments of a function. Often useful in combination with
partial()
.Example
>>> f = flip(round) ... >>> f(2, 5.125) 5.13 >>> f(0, 3.4) 3
Note
The resulting callable is picklable if the original is.
- calls.pipe() → Callable[[calls.T1], calls.T1][source]¶
- calls.pipe(__f1: Callable[[calls.T1], calls.T2]) → Callable[[calls.T1], calls.T2]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3]) → Callable[[calls.T1], calls.T3]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3], __f3: Callable[[calls.T3], calls.T4]) → Callable[[calls.T1], calls.T4]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3], __f3: Callable[[calls.T3], calls.T4], __f4: Callable[[calls.T4], calls.T5]) → Callable[[calls.T1], calls.T5]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3], __f3: Callable[[calls.T3], calls.T4], __f4: Callable[[calls.T4], calls.T5], __f5: Callable[[calls.T5], calls.T6]) → Callable[[calls.T1], calls.T6]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3], __f3: Callable[[calls.T3], calls.T4], __f4: Callable[[calls.T4], calls.T5], __f5: Callable[[calls.T5], calls.T6], __f6: Callable[[calls.T6], calls.T7]) → Callable[[calls.T1], calls.T7]
- calls.pipe(__f1: Callable[[calls.T1], calls.T2], __f2: Callable[[calls.T2], calls.T3], __f3: Callable[[calls.T3], calls.T4], __f4: Callable[[calls.T4], calls.T5], __f5: Callable[[calls.T5], calls.T6], __f6: Callable[[calls.T6], calls.T7], __f7: Callable[[calls.T7], calls.T8]) → Callable[[calls.T1], calls.T8]
- calls.pipe(__f1: Callable, __f2: Callable, __f3: Callable, __f4: Callable, __f5: Callable, __f6: Callable, __f7: Callable, *__fn: Callable) → Callable
Create a new callable by piping several in succession
Example
>>> fn = pipe(float, lambda x: x / 4, int) >>> fn('9.3') 9
Note
Type checking is supported up to 7 functions, due to limitations of the Python type system.
The resulting callable is picklable if the given callables are.
- class calls.UnaryFunction(*args, **kwargs)[source]¶
Protocol
for a callable taking exactly one argument.Examples of objects satisfying this protocol:
>>> # Below are all UnaryFunction[int, float] ... >>> def myfunc(a: int) -> float: ... return a / 7 ... >>> lambda a: a / 7 ... >>> (7).__rtruediv__
- class calls.BinaryFunction(*args, **kwargs)[source]¶
Protocol
for a callable which takes exactly two arguments.Examples of objects satisfying this protocol:
>>> # Below are all BinaryFunction[str, int, str] ... >>> def myfunc(s: str, w: int) -> str: ... return a.center(b) ... >>> lambda s, w: s.center(w) ... >>> str.center