Lesson 3 followup: variable scoping Several students wanted to know about variable scoping. This is a relatively advanced topic that will probably only make sense to folks who have done a fair amount of programming in other languages. So, beginners, feel free to skip this message -- you won't need it for anything in this class. > count = 0 # Initialize the count variable and set it to zero [ ... ] > for i in wordlist : > count += 1 > > Quick question on that one, from one of those Perl slobs (ie, me) -- > I stuck in an initialization value for variable "count" because it > felt awkward not to have anything -- I'm used to strict variable > declarations in Perl (which yes, I know you technically don't have > to use, but you'd be a dope not to). Is there an equivalent here? Python doesn't have any way of formally declaring variables, or restricting them to certain types (like saying i will always be an integer). You create a variable by setting it, like i = 42, and you can do that any time. But in your example, you did need the initialization, because you wouldn't be able to say "count += 1" if you hadn't already set count; count += 1 means "take the current value and add 1 to it", so you'd get a "not defined" error if you hadn't set count first. > And if not, how do you determine variable scope, or does such a > concept even exist within Python? > > I guess I might be getting ahead of things a bit. For new programmers, variable scope basically means "if I create a variable i inside my program, where in the program can I use it?" Basically, you can use a variable any time after you first set it. But when you throw in functions the scoping gets a bit complicated. (I'll be covering functions in lesson 4, anyone who's not familiar with them yet.) Anyway, if you have a function, and you've set a variable i before you call the function, then the function will see the variable by that name -- but only for reading. If it ever tries to set it, you'll end up with a local variable i which is not connected to the global variable i. If you want the function to be able to set the global i, there's a "global" keyword you can use inside the function. As I said, it's confusing, and I've never found a good write-up on it -- a lot of Python books seem to gloss over scoping entirely, and most of what I just wrote, I determined empirically by trying it, IMHO, it's one of the language's weakest points. Happily, you can mostly avoid it by using objects and functions instead of globals.