[Python-ideas] Allow imports to a global name

Terry Reedy tjreedy at udel.edu
Wed Apr 11 07:08:50 CEST 2012


On 4/10/2012 8:59 PM, Nick Coghlan wrote:
> On Wed, Apr 11, 2012 at 10:36 AM, Guido van Rossum<guido at python.org>  wrote:
>> +1
>
> Ditto. FWIW, I'm actually in favour of dropping everything after the
> "or" in that paragraph from the language spec, since we don't enforce
> *any* of it. Aside from formal parameter definitions (which explicitly
> declare local variables), name binding operations are just name
> binding operations regardless of the specific syntax.
>
> With global:
>
>>>> def f():
> ...   global x
> ...   for x in (): pass
> ...   class x: pass
> ...   def x(): pass
> ...   import sys as x
> ...
>>>> f()
>>>> x
> <module 'sys' (built-in)>

I found this slightly surprising, but on checking with dis, each of the 
'implicit' assignments is implemented as the equivalent of x = 
internal_function_call(args).  (For for-loops, the assignment is within 
the loop.) Which is to say, each bytecode sequence ends with store_xxx 
where xxx is 'fast' or 'global. So now I am not surprised.

-- 
Terry Jan Reedy




More information about the Python-ideas mailing list