_
0.1
Quick and efficient lambda functions.
_
?
What is _
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
_
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 _ 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 _ import _1 >>> _1[0]([1, 2]) 1 >>> list(map(_1[1], [(0, 1), (2, 3), (4, 5)])) [0, 2, 4] >>> _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 _ 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
License
_
is free software, licensed under the GNU General Public
License, version 2. For more information see the LICENSE
file.
Source
Source code is hosted on github at https://github.com/llllllllll/_.