George Sakkis wrote: > Then write a closure. You get both encapsulation and efficience, and as > a bonus, customization of the translating function: > > import string > > def translateFactory(validChars=string.letters+string.digits, > replaceChar='_'): > all=string.maketrans('','') > badcars=all.translate(all,validChars) > table=string.maketrans(badcars, replaceChar*len(badcars)) > def translate(text): > return text.translate(table) > # bind any attributes you want to be accessible > # translate.badcars = badcars > # ... > return translate > > > tr = translateFactory() > tr("Hel\xfflo")
This is clean,but I suppose it would get cumbersome if I want to have more functions in the namespace/factory and it implies all that bindings in the end. The second point also shows my perplexities about functions namespace: def function(): function.foo='something' a=function.foo Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'function' object has no attribute 'foo' How should I read it? The namespace is half done inside the function? Thanks Paolino ___________________________________ Yahoo! Messenger: chiamate gratuite in tutto il mondo http://it.beta.messenger.yahoo.com -- http://mail.python.org/mailman/listinfo/python-list