Quick and efficient lambda functions.
Project description
``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
<https://github.com/abarnert/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:
.. code-block:: python
>>> 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
~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block::
>>> 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.
.. code-block:: python
>>> 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``
License
-------
``fz`` 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/fz.
=========
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
<https://github.com/abarnert/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:
.. code-block:: python
>>> 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
~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block::
>>> 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.
.. code-block:: python
>>> 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``
License
-------
``fz`` 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/fz.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fz-0.1.0.tar.gz
(5.5 kB
view hashes)