* Cecilia Alm <[EMAIL PROTECTED]> [070415 23:19]:
> 2007/4/15, Andreas Kostyrka <[EMAIL PROTECTED]>:
> >* Cecilia Alm <[EMAIL PROTECTED]> [070415 18:21]:
> >> If a module "x" imports module "y" with a global variable "z", then
> >> this global can be referred or assigned to in "x" with the syntax
> >> "y.z" (no "global" keyword preceding) and changes are accessible to
> >> class methods in "y" referring to "global z".
> >
> >Well, you don't need the global statement for accessing z. You need it
> >for modifying it, or Python will assume that you are working with a
> >local variable z.
> >
> 
> Hm, I'm confused by your post. Within the global's module, the "global
> z" syntax works for bothh modifying and accessing, and makes the code
> clearer to read in my opinion. (Although, it may not be needed when
> accessing or when modifying mutable types.)
Well, the global is not needed for accessing the name.

And the assume it's a local variable is meant serious:

>>> def x():
...     z += 1
... 
>>> x()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 2, in x
UnboundLocalError: local variable 'z' referenced before assignment

It's one of the more baffling errors for newbies.

The real reason is important to understand, it explains things like
self. and global:

*) when accessing a name, it's easy to try out multiple namespaces
till you find the correct one.
*) when reassigning a name, it's way harder, because you cannot
automatically guess which namespace should be used.

That's the reason why you need global statement, which makes
assignments to a name go to the module namespace. And that's one of
the reasons, why instance variables are accessed explicitly as self.name.

Andreas
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to