λ's
This commit is contained in:
parent
02c8347634
commit
3113fda262
|
@ -0,0 +1,82 @@
|
||||||
|
import ast
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
FUNC_NAME = "__lambda__"
|
||||||
|
|
||||||
|
def λ(*args):
|
||||||
|
prev_frame = inspect.currentframe().f_back
|
||||||
|
|
||||||
|
body = ast.parse(args[-1], "<lambda>", "exec").body
|
||||||
|
args = args[:-1]
|
||||||
|
|
||||||
|
def make_arg(a):
|
||||||
|
a = ast.arg(a, None, None)
|
||||||
|
a.lineno = 0
|
||||||
|
a.col_offset = 0
|
||||||
|
return a
|
||||||
|
|
||||||
|
arguments = ast.arguments(posonlyargs=[],
|
||||||
|
args=[make_arg(a) for a in args],
|
||||||
|
kwonlyargs=[], kw_defaults=[], defaults=[])
|
||||||
|
arguments.lineno = 0
|
||||||
|
arguments.col_offset = 0
|
||||||
|
func = ast.FunctionDef(FUNC_NAME, arguments, body, [])
|
||||||
|
func.lineno = 0
|
||||||
|
func.col_offset = 0
|
||||||
|
toplevel = ast.Interactive([func])
|
||||||
|
toplevel.lineno = 0
|
||||||
|
toplevel.col_offset = 0
|
||||||
|
func = compile(toplevel, "<lambda>", "single")
|
||||||
|
|
||||||
|
exec(func, prev_frame.f_globals, prev_frame.f_locals)
|
||||||
|
func = prev_frame.f_locals[FUNC_NAME]
|
||||||
|
del prev_frame.f_locals[FUNC_NAME]
|
||||||
|
|
||||||
|
return func
|
||||||
|
|
||||||
|
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# λ("""print("haha multiline lambdas")
|
||||||
|
# return 1337""")()
|
||||||
|
#
|
||||||
|
# --------------------------------------
|
||||||
|
#
|
||||||
|
# λ("a", "b", "c", """if a:
|
||||||
|
# return b
|
||||||
|
# else:
|
||||||
|
# return c""")(False, 1, 2)
|
||||||
|
#
|
||||||
|
# --------------------------------------
|
||||||
|
#
|
||||||
|
# meow = 10
|
||||||
|
# λ("a", "b", "c", """if a:
|
||||||
|
# return b + meow
|
||||||
|
# else:
|
||||||
|
# return c + meow""")(False, 1, 2)
|
||||||
|
#
|
||||||
|
# --------------------------------------
|
||||||
|
#
|
||||||
|
# def my_func():
|
||||||
|
# meow = 20
|
||||||
|
# return λ("cnd", """if cnd:
|
||||||
|
# return meow
|
||||||
|
# else:
|
||||||
|
# return 'nope'""")
|
||||||
|
#
|
||||||
|
# meow = 30
|
||||||
|
# my_func()(True)
|
||||||
|
#
|
||||||
|
# --------------------------------------
|
||||||
|
#
|
||||||
|
# def my_func():
|
||||||
|
# meow = 20
|
||||||
|
# return λ("cnd", """global meow
|
||||||
|
# if cnd:
|
||||||
|
# return meow
|
||||||
|
# else:
|
||||||
|
# return 'nope'""")
|
||||||
|
#
|
||||||
|
# meow = 30
|
||||||
|
# my_func()(True)
|
||||||
|
#
|
Loading…
Reference in New Issue