Returns: Meaningful, Typed, and Safe Function Returns

0.26.0 · active · verified Sun Apr 12

The `returns` library (version 0.26.0) is a functional programming toolkit for Python, enhancing type-safety and explicit error handling. It allows developers to make functions return meaningful, typed, and safe values like `Result`, `Maybe`, and `IO` monads, promoting composable and testable code. The project is actively maintained with frequent releases, often every few months, introducing new features and compatibility updates.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates the `do` notation for composing operations with `Result` types. Functions `divide` and `multiply` return `Result` objects, encapsulating either a `Success` value or a `Failure` message. The `calculate_compound` function uses `yield` within the `@do(Result)` decorator to sequentially process these results, automatically propagating any `Failure`.

from returns.result import Result, Success, Failure
from returns.do_notation import do

def divide(numerator: int, denominator: int) -> Result[float, str]:
    if denominator == 0:
        return Failure('Cannot divide by zero')
    return Success(numerator / denominator)

def multiply(value: float, multiplier: int) -> Result[float, str]:
    if multiplier < 0:
        return Failure('Multiplier cannot be negative')
    return Success(value * multiplier)

@do(Result)
def calculate_compound(num: int, den: int, mult: int) -> Result[float, str]:
    divided_val = yield divide(num, den)
    final_val = yield multiply(divided_val, mult)
    return final_val

# Example usage:
assert calculate_compound(10, 2, 5) == Success(25.0)
assert calculate_compound(10, 0, 5) == Failure('Cannot divide by zero')
assert calculate_compound(10, 2, -1) == Failure('Multiplier cannot be negative')

print(calculate_compound(10, 2, 5))

view raw JSON →