Best s-expression builder targeting Python bytecode
Project description
PySExpr of Python-Compiler-Tools
A general-purpose package for gaining expression-first capability in Python world. Currently implemented by taking advantage of Python bytecode, and available since Python 3.5, i.e., by using PySExpr as a cross-version compiler, you don't have to worry about the Python version.
See documentation.
All constructors of PySExpr are documented here.
Installation
pip install pysexpr
What PySExpr
is & is not?
PySExpr is a framework for better(cross-version, efficient, expressiveness) metaprogramming in Python.
PySExpr is not a programming language, but a code generation back end good to be targeted.
PySExpr is a killer tool when it comes to programmable programming in Python. Comparing to using Python ASTs, we have perfect compatibility; in terms of generating Python code, PySExpr directly uses Python bytecode and produces faster code, at the same time you can have block expressions, assignment expressions or multiline-lambdas even in Python 3.5.
As this library is so useful, certainly there're many other scenarios for it to stand out. For example, we can backport Python3.8/PEP572's assignment expressions to Python 3.5+, by composing this library with the mechanisms proposed by future-strings.
Preview
from py_sexpr.terms import *
from py_sexpr.stack_vm.emit import module_code
xs = []
main = block(
assign_star("a", None),
for_range("a", 1, 10, call(var("print"), var("a"))),
)
exec(module_code(main), dict(print=xs.append))
assert xs == [1, 2, 3, 4, 5, 6, 7, 8, 9]
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file pysexpr-0.6-py3-none-any.whl
.
File metadata
- Download URL: pysexpr-0.6-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0.post20200210 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20c05c004dc34ab22939b0029b40bda6c69597cbfa8b84441d09e6f248cc5db1 |
|
MD5 | 4abe7b26ec1886047acf79e3a7ed6ea6 |
|
BLAKE2b-256 | f6f3d0335cb543adea89df76cb1a8d42b7b7560841a8eeb8829171341f7cb1c5 |