Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

thautwarm/PySExpr

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyPI version Build Status codecov MIT License

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]

About

S-expressions in Python. Python cross-version compiler. Clean and efficient LISP back end.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.