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

Reply via email to