En Mon, 25 May 2009 11:07:13 -0300, Jaime Fernandez del Rio
<jaime.f...@gmail.com> escribió:

These weekend I've been tearing down to pieces Michele Simionato's
decorator module, that builds signature preserving decorators. At the
heart of it all there is a dynamically generated function, which works
something similar to this...

...
    src = """def function(a,b,c) :\n    return _caller_(a,b,c)\n"""
    evaldict = {'_caller_' : _caller_}
    code = compile(src, '<string>', 'single')
    exec code in evaldict
    new_func = evaldict[function]
...

I have found fooling around with this code, that the compile step can
be completely avoided and go for a single:

    exec src in evaldict

Now, I'm sure there is a good reason for that additional step, but I
haven't been able to find what the difference between both approaches
is.

The only reason I can think of, is restricting src to be a single
statement only (due to the compile flag used).

And since I'm asking, could something similar, i.e. defining a new
function and get a handle to it, be achieved with eval?

No, because def is a statement, and eval only accepts an expression.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to