# llllllllll/fz

Quick and efficient lambda functions.
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.

# `fz` 0.1

Quick and efficient lambda functions.

## What is `fz`?

`fz` provides a nicer way to define lambda functions for Python 3. The syntax is inspired by C++ `std::bind`, Scala lambdas, and quicklambda for python.

## Syntax

`fz` lambdas use placeholder objects to represent the arguments to the new lambda. The placeholders look like: `_1`, `_2`, ..., all the way to `_255` (the maximum number of positional arguments to a function).

To create a lambda, just build up an expression using these placeholders where you want the arguments to go.

## Example Uses

### Simple Arithmetic

Many lambdas are just simple arithmetic. For example:

```>>> from fz import _1
>>> f = _1 + 1
>>> f(1)
2
>>> f(3)
4
>>> (_1 * 2)(3)
6
>>> (_1 ** 2)(3)
9
>>> list(map(_1 ** 2, range(5)))
[0, 1, 4, 9, 16]```

### Attribute and Item Access

```>>> from fz import _1

>>> _1[0]([1, 2])
1
>>> list(map(_1[1], [(0, 1), (2, 3), (4, 5)]))
[1, 3, 5]
>>> _1.imag(1j)
1.0
>>> list(map(_1.imag, (1j, 1 + 2j, 2 + 3j)))
[1, 2, 3]
```

### Function Calls

Because we can only wrap things top-down, we must explicitly wrap a function to be defered.

```>>> from fz import _f, _1, _2, _3
>>> def f(a, b):
...     return a + b
>>> _f(f)(_1, _2)(1, 2)
3
>>> g = _f(f)(_1, -1)
>>> g(1)
0

>>> flip = _f(_1)(_3, _2)
>>> flip(print, 1, 2)
2 1```

### Supported Operations

• Binary operators
• Unary operators
• Attribute access (some names are used for the implementation)
• Subscript (item access)
• `iter`
• `next`
• `abs`

`fz` is free software, licensed under the GNU General Public License, version 2. For more information see the `LICENSE` file.