>Michael Spencer wrote:
There are hundreds of items in the dictionary (that will be needed in the calculation) so passing the whole dictionary is a lot better than passing individual items....
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?
Try it and see.
Bo
Compare it with Jeff Shannon's suggestion, and with a lazy dict-wrapper like this:
>>> class wrapbigdict(object): ... """Lazy attribute access to dictionary keys. Will not access ... keys that are not valid attribute names!""" ... def __init__(self, mydict): ... object.__setattr__(self, "mydict",mydict) ... def __getattr__(self, attrname): ... return self.mydict[attrname] ... def __setattr__(self, attrname, value): ... self.mydict[attrname] = value ... ... >>> a = {'x':1, 'y':2} >>> b = {'x':3, 'y':3} ... >>> w_a = wrapbigdict(a) >>> w_b = wrapbigdict(b) ... >>> def fun(d): ... d.z = d.x + d.y ... >>> fun(w_a) >>> fun(w_b) ... >>> w_a.mydict {'y': 2, 'x': 1, 'z': 3} >>> w_b.mydict {'y': 3, 'x': 3, 'z': 6} >>>
-- http://mail.python.org/mailman/listinfo/python-list