On Thu, 24 Jan 2008 15:37:09 -0800, Tim Rau wrote: > What makes python decide whether a particular variable > is global or local?
For starters, if the line of code is not inside a class or function, that is, it's at the top level of a module, it is global. More interesting is if it is inside a function or class. If you assign to the name in the function, Python assumes it is local *unless* you have defined it as global with the global statement. Otherwise, Python will treat it as global. > I've got a list and a integer, both defined at top level, no > indentation, right next to each other: > > allThings = [] > nextID = 0 > > and yet, in the middle of a function, python sees one and doesn't see > the other: I've tried to run your code -- and it isn't easy, involving much backwards-and-forwards copying and pasting, thanks to word-wrap in you post -- and the error I get is: SyntaxError: invalid syntax because you left off the colon from the first if statement. I'm not especially inclined to start hunting through your code fixing any other errors in order to find the error you think you're getting. How about if you quote the exception traceback you actually get? > I don't think it's important, but the function is defined before > the two globals. Nope, not important. What's important is whether the function is *called* before or after the globals are created. If you're using global variables in your code, you probably should stop. As a general rule, global variables are poor programming practice for a number of reasons. Google on "Global variables considered harmful" for some examples. -- Steven -- http://mail.python.org/mailman/listinfo/python-list