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

Nick Coghlan ncoghlan at gmail.com
Thu Sep 29 14:03:28 CEST 2011


On Wed, Sep 28, 2011 at 12:39 PM, Devin Jeanpierre
<jeanpierreda at gmail.com> wrote:
>> @init(n=1, lock=Lock())
>> def global_counter():
>>  nonlocal n, lock
>>  with lock:
>>    print(n)
>>    n += 1
>
> This use-case is no good. Consider:
>
> _n = 1; _lock = Lock()
> def global_counter():
>    global _n
>    with _lock:
>        print(n)
>        n += 1

And consider what happens as soon as you have two module level
functions that you want to assign a lock to - you end up have to use
clumsy name hacks to avoid collisions in the module namespace. I'll
stick with this as my toy example (although I forgot to actually
acquire the lock in my last post)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-ideas mailing list