https://github.com/brthor/lambdazen
A better python lambda syntax (`a = (x) > x`) based on runtime source rewriting
https://github.com/brthor/lambdazen
lambda python python-lambda-syntax syntax-hacks
Last synced: 9 months ago
JSON representation
A better python lambda syntax (`a = (x) > x`) based on runtime source rewriting
- Host: GitHub
- URL: https://github.com/brthor/lambdazen
- Owner: brthor
- License: mit
- Created: 2016-09-10T06:33:03.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2016-12-22T16:28:38.000Z (over 9 years ago)
- Last Synced: 2024-08-10T11:29:34.647Z (almost 2 years ago)
- Topics: lambda, python, python-lambda-syntax, syntax-hacks
- Language: Python
- Homepage:
- Size: 31.3 KB
- Stars: 45
- Watchers: 7
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### A Better Lambda
[](https://badge.fury.io/py/lambdazen)
[](https://travis-ci.org/brthornbury/lambdazen)
*Supports Python 2.6 - 3.5*
**What is this?**
A better python lambda syntax for your anonymous function needs.
Write `a = (x) > x` instead of `a = lambda x: x`. See below for syntax caveats.
Get started immediately: `pip install lambdazen`
```python
from lambdazen import zen
def otherfunc(*args):
print sum(args)
# The zen decorator allows you to define lambdas with a better syntax
@zen
def example():
example.epic = (x, y, z) > otherfunc(x, y, z)
# Multiline lambdas are a tuple or list of statements
# The assignment operator inside is << instead of =
# The last statement is the return value
example.multiline = (x, y, z) > (
s << otherfunc(x, y, z),
s
)
# Call function so the lambdas are bound to function attributes
example()
example.epic(1,2,3)
>>> 6
example.multiline(1,2,3)
>>> 6
```
**Caveats**
- better lambdas can only be defined in a function with the `@zen` attribute
- any other code in this function will be executed, it's best to use the function as a container of lambdas
**How does it work**
[Read the story](https://github.com/brthornbury/lambdazen/blob/master/HowItWorks.md)
TLDR; Runtime in-memory source rewriting and recompilation
**Additional Examples**
```python
from lambdazen import zen
# Lambdas don't need to be bound to the function
@zen
def normalizeString(nS):
transforms = [
(s) > s.strip(),
(s) > s.lower(),
(s) > s.replace(' ', '_')]
apply_all = (transforms_list, s) > (
is_done << (len(transforms_list) == 0),
current_transform << (transforms_list[0] if not is_done else None),
remaining_transforms << (transforms_list[1:] if not is_done else None),
current_transform(apply_all(remaining_transforms, s)) if not is_done else s)
return apply_all(transforms, nS)
normalizeString("Abraham Lincoln")
>>> "abraham_lincoln"
```