[Python-ideas] Allow imports to a global name
Steven D'Aprano
steve at pearwood.info
Wed Apr 11 02:22:31 CEST 2012
Sven Marnach wrote:
> Sometimes it is useful to do a import to a global name inside a
> function. A common use case is the 'pylab' module, which must be
> imported *after* the backend has been set using 'matplotlib.use()'.
> If the backend is configuration-dependent, the statement
>
> import pylab
>
> will usually be inside a function, but the module should be available
> globally, so you would do
>
> global pylab
> import pylab
>
> While this code works (at least in CPython), the current language
> specification forbids it [1]
I quote:
Names listed in a global statement must not be defined as
formal parameters or in a for loop control target, class
definition, function definition, or import statement.
http://docs.python.org/dev/reference/simple_stmts.html#the-global-statement
I can understand that it makes no sense to declare a function parameter as
global, and I can an argument in favour of optimizing for loops by ensuring
that the target is always a local rather than global. But what is the
rationale for prohibiting globals being used for classes, functions, and imports?
It seems like an unnecessary restriction, particularly since CPython doesn't
bother to enforce it. The semantics of "global x; import x" is simple and obvious.
+1 on removing the unenforced prohibition on global class/def/import inside
functions.
--
Steven
More information about the Python-ideas
mailing list