cell object dereferencing

Terry Reedy tjreedy at udel.edu
Wed Dec 10 16:38:35 CET 2003


"Jan Decaluwe" <jan at jandecaluwe.com> wrote in message
news:3FD6EA60.2000905 at jandecaluwe.com...
> Jan Decaluwe wrote:
> > Is there a way to dereference a cell object (that is, get
> > the object that it references to) in Python?
>
> I got the following response from Samuele Pedroni.:

> well you can ... use this hack (it's a huge hack but it is safe and does
the trick):

> def proto_acc(v=None):
>   def acc():
>     return v
>   return acc
> acc0 = proto_acc()

> import new
> make_acc = lambda cell: (new.function
(acc0.func_code,acc0.func_globals,'#cell_acc',acc0.func_defaults,(cell,)))
> def cell_deref(cell):
>   return make_acc(cell)()

Cute, Samuele.  If function.func_closure were writable (which it is not)
then I believe the last four lines could be condensed as the more readable

def cell_deref(cell):
    acc0.func_closure = (cell,)
    return acc0()

but since it is not, you instead make a new function that is a near copy of
acc0 but with (cell,) substituted as *its* func_closure.

Terry J. Reedy






More information about the Python-list mailing list