On Sun, 01 Nov 2009 01:38:16 -0300, Gabriel Genellina wrote:

>> Incorrect. Simplicity of implementation and API is a virtue, in and of
>> itself. The existing module machinery is quite simple to understand,
>> use and maintain.
> 
> Uhm... module objects might be quite simple to understand, but module
> handling is everything but simple! (simplicity of implem...? quite
> simple to WHAT? ROTFLOL!!!  )

I stand corrected :)


Nevertheless, the API is simple: the first time you "import name", Python 
searches a single namespace (the path) for a module called name. There 
are other variants of import, but the basics remain:

search the path for the module called name, and do something with the 
first one you find.


>> Dealing with name clashes doesn't come for free. If you think it does,
>> I encourage you to write a patch implementing the behaviour you would
>> prefer.
> 
> I'd say it is really a bug, and has existed for a long time. 

Since import is advertised to return the first module with the given name 
it finds, I don't see it as a bug even if it doesn't do what the 
programmer intended it to do. If I do this:

>>> len = 1
>>> def parrot(s):
...     print len(s)
...
>>> parrot("spam spam spam")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in parrot
TypeError: 'int' object is not callable


it isn't a bug in Python that I have misunderstood scopes and 
inadvertently shadowed a builtin. Shadowing a standard library module is 
no different.


> One way to
> avoid name clashes would be to put the entire standard library under a
> package; a program that wants the standard re module would write "import
> std.re" instead of "import re", or something similar. Every time the std
> package is suggested, the main argument against it is backwards
> compatibility.

You could do it in a backwards compatible way, by adding the std package 
directory into the path.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to