Why not make local variables attributes of the function, i.e. replace:
def inner(): global x in outer x = 42
def inner(): outer.x = 42
Because this already means something! outer.x refers to the attribute x of function outer. That's quite different than local variable x of the most recent invocation of outer on the current thread's call stack!
Global variables could then be assigned via: global.x = 42
This has a tiny bit of appeal, but not enough to bother.
--Guido van Rossum (home page: http://www.python.org/%7Eguido/)