[Python-ideas] Tweaking closures and lexical scoping to include the function being defined

Arnaud Delobelle arnodel at gmail.com
Wed Sep 28 07:23:42 CEST 2011


On 28 September 2011 01:56, Bruce Leban <bruce at leapyear.org> wrote:
[...]
> I proposed a special decorator-like syntax ($inject) which would pull the
> declaration out of the function entirely (putting it at the scope where it
> evaluates). There wasn't much discussion other than that it wasn't feasible
> with current implementation.

A hybrid approach would be possible, taking from both approaches
(decorator and keyword):

* a keyword to declare in the body of the function that a variable is
of the "own" kind.
* function objects would grow an __own__ attribute which is a dict-like object:
    - f.__own__["i"] would return the contents of the cell that the
own variable "i" refers to
    - f.__own__["i"] = 42 would set the cell contents of the own
variable "i" to 42
(or some other equivalent mechanism)
* then one could create a kind of "inject" decorator.

Here's an example:

def setown(**kwargs):
    def decorator(f):
        for k, v in kwargs.items():
            f.__own__[k] = v
    return decorator

@setown(i=42)
def foo(x):
    own i
    i += 1
    return i

-- 
Arnaud



More information about the Python-ideas mailing list