[Python-Dev] Re: Python-Dev Digest, Vol 5, Issue 57
Guido van Rossum
guido at python.org
Tue Dec 16 17:07:56 EST 2003
[Ed]
> What's the motivation for restricting it to from-imports? I suspect
> that this will cause confusion, and it doesn't feel self-consistent to
> me: why can you call a module ".foo" in one context, and not in
> another? In particular, I think that if people see that you can do:
>
> from .foo import *
>
> Then they'll assume that they can also do:
>
> import .foo
>
> With the obvious semantics, i.e. equivalence to:
>
> from . import foo
>
> What do we gain by not extending the syntax to from-less imports?
Currently, the rule is that after
import <something>
you can use
<something>
in an expression to refer to whatever you imported. This applies to
both
import foo <--> foo in expressions
and
import foo.bar <--> foo.bar in expressions
But if we were to allow
import .foo
we'd have to allow
.foo
in expressions, and I would like to reserve that syntax for the "with"
statement.
[Werner]
> But it would be possible to say:
>
> import .foo as my_foo
> import foo
>
> and access both through modules through the name they're bound to.
>
> Therefore I'd propose to allow relative from-less imports, but require
> them to always use the "as" clause.
This just adds more complexity; there's nothing you can do without
this addition.
[Jack]
> Is "from . import *" allowed? Whenever I start to think about it I
> tend to go into oscillation (yes because within package foo its the same
> as "from foo import *" on the outside; no because "import *" isn't
> allowed today either).
Yes, "from . import <whatever>" has the exact same meaning as spelling
out the corresponding absolute module path after "from".
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list