>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
