import types
def freeVar(val):
def nested():
return val
return nested.__closure__[0]
def nested(outer, innerName, **freeVars):
if isinstance(outer, (types.FunctionType, types.MethodType)):
outer = outer.func_code
for const in outer.co_consts:
if isinstance(const, types.CodeType) and const.co_name == innerName:
return types.FunctionType(const, globals(), None, None, tuple(
freeVar(freeVars[name]) for name in const.co_freevars))
Diff to Previous Revision
--- revision 1 2016-11-10 10:13:59
+++ revision 2 2016-11-10 10:15:52
@@ -1,14 +1,14 @@
- import types
-
- def freeVar(val):
- def nested():
- return val
- return nested.__closure__[0]
-
- def nested(outer, innerName, **freeVars):
- if isinstance(outer, (types.FunctionType, types.MethodType)):
- outer = outer.func_code
- for const in outer.co_consts:
- if isinstance(const, types.CodeType) and const.co_name == innerName:
- return types.FunctionType(const, globals(), None, None, tuple(
- freeVar(freeVars[name]) for name in const.co_freevars))
+import types
+
+def freeVar(val):
+ def nested():
+ return val
+ return nested.__closure__[0]
+
+def nested(outer, innerName, **freeVars):
+ if isinstance(outer, (types.FunctionType, types.MethodType)):
+ outer = outer.func_code
+ for const in outer.co_consts:
+ if isinstance(const, types.CodeType) and const.co_name == innerName:
+ return types.FunctionType(const, globals(), None, None, tuple(
+ freeVar(freeVars[name]) for name in const.co_freevars))