Quoth walterbyrd <walterb...@iname.com>: > For a language as well structured as Python, this seems somewhat > sloppy, and inconsistant. Or is there some good reason for this?
Yes. It's called Object Oriented Programming. > Here is what I mean: > > def a(): > x = 99 > print x > > def b(): > print x > > a() > b() # raises an exception because x is not defined. > > However in the methods are within a class, the scoping seems to work > differently. > > class ab(): > def a(self): > self.x = 99 > print self.x > def b(self): > print self.x > > i = ab() > i.a() > i.b() # this works, why no lexical scoping? Because x is an attribute. If you don't understand what that means, read any introductory article on OOP. To give you a clue, if you had said: class ab(): def a(self): x = 99 print x def b(self): print x You'd have gotten the exception you expected (assuming x wasn't defined globally). --RDM -- http://mail.python.org/mailman/listinfo/python-list