[EMAIL PROTECTED] wrote: > I wrote up a quick little set of tests, I was acutally comparing ways > of doing "case" behavior just to get some performance information. Now > two of my test cases had almost identical results which was not at all > what I expected. Ultimately I realized I don't really know how > literals are treated within the interpreter. > > The two implementations I was looking at were: > > class caseFunction(object): > def __init__(self): > self.caseDict = {'a':"retval = 'a'", > 'b':"retval='b'","c":"retval='c'","d":"retval='d'", > > "e":"retval='e'","f":"retval='f'","g":"retval='g'","h":"retval='h'", > "i":"retval='i'"} > > def doIt(self,a): > exec(self.caseDict.get(a)) > return retval
Err... Why would you want to exec anything here ? Remember that Python's functions are objects too: def funcA(*args, **kw): return "funcA called with %s %s" % (str(args), kw) def funcB(*args, **kw): return "funcB called with %s %s" % (str(args), kw) def funcC(*args, **kw): return "funcC called with %s %s" % (str(args), kw) def defaultFunc(*args, **kw): return "defaultFunc called with %s %s" % (str(args), kw) class SwitchFunc(object): def __init__(self, default, **kw): self._default = default self._switch = kw # makes the object callable. def __call__(self, case, *args, **kw): func = self._switch.get(case, self._default) return func(*args, **kw) switch = SwitchFunc(defaultFunc, a=funcA, b=funcB, c=funcC) for case in "abcX": print switch(case, "foo", q=42) HTH -- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in '[EMAIL PROTECTED]'.split('@')])" -- http://mail.python.org/mailman/listinfo/python-list