dry-python / lambdas

Write short and fully-typed lambdas where you need them.
BSD 2-Clause "Simplified" License
270 stars 5 forks source link
composition dry-python fp functional-programming lambda lambdas mypy mypy-plugins mypy-stubs python python3

lambdas logo


Build Status codecov Documentation Status Python Version wemake-python-styleguide Telegram chat


Write short and fully-typed lambdas where you need them.

Features

Installation

pip install lambdas

You also need to configure mypy correctly and install our plugin:

# In setup.cfg or mypy.ini:
[mypy]
plugins =
  lambdas.contrib.mypy.lambdas_plugin

We recommend to use the same mypy settings we use.

Examples

Imagine that you need to sort an array of dictionaries like so:

>>> scores = [
...     {'name': 'Nikita', 'score': 2},
...     {'name': 'Oleg', 'score': 1},
...     {'name': 'Pavel', 'score': 4},
... ]

>>> print(sorted(scores, key=lambda item: item['score']))
[{'name': 'Oleg', 'score': 1}, {'name': 'Nikita', 'score': 2}, {'name': 'Pavel', 'score': 4}]

And it works perfectly fine. Except, that you have to do a lot of typing for such a simple operation.

That's where lambdas helper steps in:

>>> from lambdas import _

>>> scores = [
...     {'name': 'Nikita', 'score': 2},
...     {'name': 'Oleg', 'score': 1},
...     {'name': 'Pavel', 'score': 4},
... ]

>>> print(sorted(scores, key=_['score']))
[{'name': 'Oleg', 'score': 1}, {'name': 'Nikita', 'score': 2}, {'name': 'Pavel', 'score': 4}]

It might really save you a lot of effort, when you use a lot of lambda functions. Like when using returns library.

We can easily create math expressions:

>>> from lambdas import _

>>> math_expression = _ * 2 + 1
>>> print(math_expression(10))
21
>>> complex_math_expression = 50 / (_ ** 2) * 2
>>> print(complex_math_expression(5))
100.0

Work in progress:

For now you will have to use regular lamdbas in these cases.