Simon Forman wrote: > Fuzzyman wrote: [snip..] > > I was hoping I could get to the code object for the *body* of the > > function. Looks like that won't be possible without dis-assembling the > > bytecode or other tricks even more hackish than what I've already done. > > > > For the record, the code I was using was : > > > > x = 3 > > def f(x): > > print x > > > > CodeType = type(f.func_code) > > > > def convert_function(f): > > code = f.func_code > > nlocals = max(code.co_nlocals - code.co_argcount, 0) > > newCode = CodeType(0, nlocals, code.co_stacksize, code.co_flags, > > code.co_code, code.co_consts, code.co_names, > > code.co_varnames, code.co_filename, > > code.co_name, > > code.co_firstlineno, code.co_lnotab, > > code.co_freevars, > > code.co_cellvars) > > return newCode > > > > print convert_function(f) > > exec convert_function(f) > > > > Fuzzyman > > http://www.voidspace.org.uk/python/index.shtml > > Out of curiosity, why are you doing this? >
In Ruby anonymous code blocks (which take parameters and can presumably return values) are executed within the scope in which they are used, rather than the scope that they are defined. I wanted to see how close to that I could get in Python. Obviously code could be compiled from a string, but I thought extracting it from the body of a function was closer. All the best, Fuzzyman http://www.voidspace.org.uk/python/index.shtml > Peace, > ~Simon -- http://mail.python.org/mailman/listinfo/python-list