En Fri, 18 May 2007 20:49:33 -0300, Mitko Haralanov <[EMAIL PROTECTED]> escribió:
> On 18 May 2007 15:51:40 -0700 > ici <[EMAIL PROTECTED]> wrote: > >> exec it :) > > Thank you! That works when I compile/exec it in the main body of the > program. However, when I try to do that in a separate module it > doesn't. For example: exec has a long form - see http://docs.python.org/ref/exec.html And forget the compile pass - let Python handle it automatically. Also note that exec is a statement, not a function, so you don't need () To "inject" inside a module a function defined in source_code, do: exec source_code in module.__dict__ To "inject" a function inside a class, it's easier if you use an intermediate dictionary: d = globals().copy() exec source_code in d my_class.method = d['method'] > def register (self, text): > exec (compiler.compile (text, "<string>", > "exec")) > > f.register ("def blah():\n\tprint 'blah'\n") > > In this case, the function 'blah' is nowhere to be found. I've tried > looking in 'f', in the class 'Foo', in the module 'Foo' and it's > nowhere. It existed briefly in the local namespace of the register method - after register is exited, it's gone. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list