Michael Hoffman wrote: > Fernando Perez wrote: > > > I am trying to do a run-time modification of a function's closure, > > where I want to modify the value of one of the variables in the closure. > > Out of curiosity, why?
Oh, I was just trying to play a little trick inside a tight loop where I would modify on the fly the function's closure to change a parameter. I can do it in a million ways, but at creation time, the closure approach provides the cleanest syntax. But at runtime, I have an algorithm that needs to modify certain parameters many times, and the least-expensive way would be to be able to write directly into the closure. > Closer inspection of the docs <http://docs.python.org/ref/types.html> > reveals that it is not writable after all. Therefore the only way I can Ah, the docs have improved. I'm using 2.3.4, and the same page: http://www.python.org/doc/2.3.4/ref/types.html only says: Of these, func_code, func_defaults, func_doc/__doc__, and func_dict/__dict__ may be writable; the others can never be changed. That's what led me to believe it could be done. Thanks for pointing me to the 2.4 docs, which are much less ambiguous. > see to do it without writing an extension is to generate some dummy > function and copy the func_closure attribute from it. Luckily, you have > already produced a factory for such a function: Yes, I knew of the new.function() approach, but the problem is that I don't know how to make a fresh closure for it. I can reuse the closure from a different function, but the docs don't say how to make a valid closure tuple. This is the typical problem of the stdlib docs, which under-specify what is supposed to go into a call and don't give at least a specific example. Many thanks though, I'll probably end up using a less dirty hack :) Cheers, f -- http://mail.python.org/mailman/listinfo/python-list