At 03:16 PM 5/24/2005 -0700, Heikki Toivonen wrote:
Phillip J. Eby wrote:
> At 02:07 PM 5/24/2005 -0700, Heikki Toivonen wrote:
>
>> > +from datetime import datetime
>>
>> This is just a general note about from vs import. I think we determined
>> that import is better, so things like this would be better to write:
>>
>> import datetime.datetime as datetime
>
> Since these two statements do the same thing, I don't understand how/why
> one could be better, unless you mean readability. However, from a
I think there are subtle differences. I would have to check, but I
believe one difference is that with import doing reload() would work as
expected, but not so with from. In other words, doing:
from datetime import datetime
# then sometime later call
reload(datetime)
would be slightly different than:
import datetime.datetime as datetime
# then sometime later call
reload(datetime)
Actually, both of these will fail, because the 'datetime' being imported is
not a module, e.g.:
>>> from datetime import datetime
>>> reload(datetime)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in -toplevel-
reload(datetime)
TypeError: reload() argument must be module
>>> datetime
<type 'datetime.datetime'>
Now, have a look at this:
>>> import datetime.datetime as datetime
Traceback (most recent call last):
File "<pyshell#0>", line 1, in -toplevel-
import datetime.datetime as datetime
ImportError: No module named datetime
In other words, your proposed version doesn't actually work at all, which
surprised me because I didn't realize that "import x.y as z" requires that
"x.y" be a module.
So, the two forms are not semantically equivalent unless the item being
imported is a module; in all other cases you must use the "from" form if
you wish to have the name added to your module's namespace.
We haven't been rigorous with enforcing the convention though. And I
don't know if we are actually using reload(), or if we are even planning
on using it, or if it would actually be a bad idea to even try use it.
In this particular case, reload() won't work with either form, because the
desired object (the 'datetime' type) is not a module.
However, assuming that the object you are importing *is* a module, then it
doesn't matter how you import it; reload() just expects a module object.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev