* 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