stupid closure tricks in py3k

posted on July 18, 2010 - tagged as: python

This is kind of silly, but I like the nonlocal keyword in Python 3 (well, ok, I like let-bindings in Lisps much much better, but this will do) and how you can get a closure and then poke the insides of the closure to see what it’s up to.  I’m sure this isn’t recommended, but it’s a fun trick:

def counter():
    a = 0
    def inc():
        nonlocal a
        a+=1
        return a
    return inc

c = counter()
print(c())
print(c())
print(c())

print(c.__closure__[0].cell_contents)

I’d guess the locations of cells in the closure tuple are determined at compile time (i.e. they won’t change between runs), but I haven’t investigated this.

Comments !

social

tags