Quick and efficient lambda functions.

## Project description

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

## Source

Source code is hosted on github at https://github.com/llllllllll/fz.