On 2007-11-02, Jim Hendricks <[EMAIL PROTECTED]> wrote: > New to python, programming in 15 or so langs for 24 years. > > Couple of questions the tuts I've looked at don't explain: > > 1) global vars - python sets scope to the block a var is > declared (1st set), I see the global keyword that allows access > to global vars in a function, what I'm not clear on is does > that global need to be declared in the global scope, or, when > 1st set in a function where it is listed as a global, does that > then declare the necessary global.
Names that are assigned in an assignment statement are assumed to be defined in the current scope. Names that are assigned to in a function are considered local variables to that function. This allows them to be faster to access than other attributes or global variables (which are just attributes of a module). def foo(): x = 7 In function foo x is a local variable. This is true even if there is an x defined in foo's enclosing scope. x = 5 def foo(): x = 7 x is a local variable, which shadows the module scope (global) x. x = 5 If x is referenced, but not assigned to, then Python does not create a local variable for it, and normal lookup rules will cause x to be found in the enclosing scope of the bar function, below: def bar(): print x In bar, the x name refers to the global x. In order to inform Python that you would like to make modifications to a global variable in a function, you use the global statement to declare your intation. This overrides Python's assumption that that name is a local variable. x = 5 def foo2(): global x x = 7 > 2) Everything is an object. So then, why the distinction between > functions/variables and fields/methods. If a module is an object, would > not every function be a method of that module and every variable be a > field of that module? You are almost correct. Every identifier/name in Python is conceptually an attribute of an object. But identifiers in Python are not typed. It is the objects that they refer to that are typed. -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list