Warning

This page was created from a pull request (#904).

Transducers

API Reference

class Reduced(inner_value)[source]

Bases: object

Sentinel for early termination inside transducer.

>>> from returns.transducers import tmap, transduce, Reduced

>>> def add_one(number: int) -> int:
...     return number + 1

>>> def add(acc: int, number: int) -> int:
...     if acc == 3:
...         return Reduced(acc)
...     return acc + number

>>> my_list = [0, 1, 2]
>>> assert transduce(tmap(add_one), add, 0, my_list) == 3
Parameters

inner_value (Any) –

property value
Return type

Any

Missing = <returns.transducers.transducers._Missing object>

A singleton representing any missing value

transduce(xform, reducing_function, initial, iterable)[source]

Process information with transducers.

>>> from returns.transducers import tmap, transduce

>>> def add_one(number: int) -> int:
...     return number + 1

>>> def add(acc: int, number: int) -> int:
...     return acc + number

>>> my_list = [0, 1, 2]
>>> assert transduce(tmap(add_one), add, 0, my_list) == 6
Parameters
  • xform (Callable[[Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]], Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]]) –

  • reducing_function (Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]) –

  • initial (~_AccValueType) –

  • iterable (Iterable[~_ValueType]) –

Return type

~_AccValueType

reduce(function: Callable[[_ValueType, _ValueType], _ValueType], iterable: Iterable[_ValueType], initial: returns.transducers.transducers._Missing = Missing)_ValueType[source]
reduce(function: Callable[[_AccValueType, _ValueType], _AccValueType], iterable: Iterable[_ValueType], initial: _AccValueType)_AccValueType

A rewritten version of reduce.

This version considers some features borrowed from Clojure:

  • Early termination

  • Function initializer [TODO]

You can use it as a normal reduce if you want:

>>> from returns.transducers import reduce

>>> def add(acc: int, value: int) -> int:
...     return acc + value

>>> assert reduce(add, [1, 2, 3]) == 6
tmap(function)[source]

A map implementation on a transducer form.

>>> from typing import List
>>> from returns.transducers import tmap, reduce

>>> def add_one(number: int) -> int:
...     return number + 1

>>> def append(collection: List[int], item: int) -> List[int]:
...     collection.append(item)
...     return collection

>>> my_list = [0, 1]
>>> xformaa = tmap(add_one)(append)
>>> assert reduce(xformaa, my_list, []) == [1, 2]
Parameters

function (Callable[[~_ValueType], ~_NewValueType]) –

Return type

Callable[[Callable[[~_AccValueType, ~_NewValueType], ~_AccValueType]], Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]]

tfilter(predicate)[source]

filter implementation on a transducer form.

>>> from typing import List
>>> from returns.transducers import tfilter, reduce

>>> def is_even(number: int) -> bool:
...     return number % 2 == 0

>>> def append(collection: List[int], item: int) -> List[int]:
...     collection.append(item)
...     return collection

>>> my_list = [0, 1, 2, 3, 4, 5, 6]
>>> xform = tfilter(is_even)(append)
>>> assert reduce(xform, my_list, []) == [0, 2, 4, 6]
Parameters

predicate (Callable[[~_ValueType], bool]) –

Return type

Callable[[Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]], Callable[[~_AccValueType, ~_ValueType], ~_AccValueType]]