An idiom for code generation with exec

bruno.desthuilliers at gmail.com bruno.desthuilliers at gmail.com
Fri Jun 20 17:06:04 EDT 2008


On 20 juin, 21:41, eliben <eli... at gmail.com> wrote:
> > [1] except using compile to build a code object with the function's
> > body, then instanciate a function object using this code, but I'm not
> > sure whether it will buy you much more performance-wise. I'd personnaly
> > prefer this because I find it more explicit and readable, but YMMV.
>
> How is compiling more readable than exec -

Using compile and function(), you explicitely instanciate a new
function object, while using exec you're relying on a side effect.

> doesn't it require an extra
> step ?

Well... Your way:

   d = {}
  exec code in globals(), d
  return d['foo']

My way:

  return function(compile(code, '<string>', 'exec'), globals())

As far as I'm concern, it's two steps less - but YMMV, of course !-)

>  You generate code dynamically anyway.

Yes, indeed. Which may or not be the right thing to do here, but this
is a different question (and one I can't actually answer).




More information about the Python-list mailing list