namespaces
Bengt Richter
bokr at oz.net
Mon Aug 1 08:34:05 EDT 2005
On Sun, 31 Jul 2005 21:40:14 +0200, Paolino <paolo_veronelli at tiscali.it> wrote:
>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.
You are allowed to have more than one factory ;-)
>
>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'
>
You have not yet executed the statement function.foo='something'
so you should not expect to see its effect ;-)
>How should I read it? The namespace is half done inside the function?
>
>>> 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'
>>> vars(function)
{}
Ok, to make the statement execute, execute function:
>>> function()
>>> a=function.foo
>>> a
'something'
>>> vars(function)
{'foo': 'something'}
Regards,
Bengt Richter
More information about the Python-list
mailing list