[Python-ideas] Allow from foo import bar*

MRAB python at mrabarnett.plus.com
Thu Oct 3 19:25:46 CEST 2013


On 03/10/2013 18:09, Giampaolo Rodola' wrote:
> I suppose this has already been proposed in past but couldn't find
> any online  reference so here goes.
> When it comes to module constant imports I usually like being explicit
> it's OK with me as long as I have to do:
>
>  >>> from resource import (RLIMIT_CORE, RLIMIT_CPU, RLIMIT_FSIZE)
>
> Nevertheless in case the existence of certain constants depends on the
> platform in use I end up doing:
>
>  >>> if hasattr(resource, "RLIMIT_MSGQUEUE"):  # linux only
> ....         import resource.RLIMIT_MSGQUEUE
> ....
>  >>> if hasattr(resource, "RLIMIT_NICE"):  # linux only
> ....         import resource.RLIMIT_NICE
> ....
>
>
> ...or worse, if for simplicity I'm willing to simply import all RLIMIT_*
> constants I'll have to do this:
>
>  >>> import resource
>  >>> import sys
>  >>> for name in dir(resource):
> ....    if name.startswith('RLIMIT_'):
> ....        setattr(sys.modules[__name__], name, getattr(resource, name))
>
> ...or just give up and use:
>
> from resource import *
>
> ...which of course will pollute the namespace with unnecessary stuff.
> So why not just allow "from resource import RLIMIT_*" syntax?
> Another interesting variation might be:
>
>
>  >>> from socket import AF_*, SOCK_*
>  >>> AF_INET, AF_INET6, SOCK_STREAM, SOCK_DGRAM
> (2, 10, 1, 2)
>
>
> On the other hand mixing "*" and "common" imports would be forbidden:
>
>  >>> from socket import AF_*, socket,
>    File "<stdin>", line 1
>      from socket import AF_*, socket
>                                           ^
> SyntaxError: invalid syntax;
>
>
> Thoughts?
>
If you're importing RLIMIT_MSGQUEUE, then presumably you're using it
somewhere(!), but if it's platform-specific, you'll still need to check
which platform the code is running on anyway before trying to use it...



More information about the Python-ideas mailing list