why import * only allowed at module level?

Simo Salminen this at is.invalid
Mon Jan 14 00:33:49 EST 2002


* Hans Nowak [Mon, 14 Jan 2002 04:39:13 GMT]
> "One side effect of the change is that the from module 
> import * and exec statements have been made illegal 
> inside a function scope under certain conditions. The 
> Python reference manual has said all along that from 
> module import * is only legal at the top level of a 
> module, but the CPython interpreter has never enforced 
> this before. As part of the implementation of nested 
> scopes, the compiler which turns Python source into 
> bytecodes has to generate different code to access 
> variables in a containing scope. from module import * 
> and exec make it impossible for the compiler to 
> figure this out, because they add names to the local 
> namespace that are unknowable at compile time." 
> 

[and that paragraph continues]
"Therefore, if a function contains function definitions or lambda expressions
with free variables, the compiler will flag this by raising a SyntaxError
exception." 

ok, but why:
>>> def a1():
...     from os import *

does not work, but:

>>> def a2():
...     exec 'from os import *'


works?

-- 
simo <dot> salminen <at> iki <dot> fi



More information about the Python-list mailing list