Bo Peng wrote:
Yes. I thought of using exec or eval. If there are a dozen statements,
def fun(d):
exec 'z = x + y' in globals(), d
seems to be more readable than
def fun(d):
d['z'] = d['x'] + d['y']
But how severe will the performance penalty be?
You can precompile the string using compile(), you only have to do this
once.
>>> def makeFunction(funcStr, name):
... code = compile(funcStr, name, 'exec')
... def f(d):
... exec code in d
... del d['__builtins__'] # clean up extra entry in d
... return f
...
>>> f = makeFunction('z = x + y', 'f')
>>> a = {'x':1, 'y':2}
>>> b = {'x':3, 'y':3}
>>> f(a)
>>> a
{'y': 2, 'x': 1, 'z': 3}
>>> f(b)
>>> b
{'y': 3, 'x': 3, 'z': 6}
--
http://mail.python.org/mailman/listinfo/python-list