I was somehow surprised by the following behavior:
def main():
print "%s" % foo
if __name__ == "__main__":
foo = "bar"
main()
i.e. a module function has access to enclosing variables in the __main__
. What's the explanation for it?
foo is a module global variable (it's not in any function). All scopes within the module can access it.
Variables in the current modules global scope are visible everywhere in the module -- this rule also holds for the
__main__
module.From Guido's tutorial:
In python there's the global scope, and functions have their own scopes. So it you define foo under the name==main, it's in the global scope. Also, it's not a mistake to use a variable which hasn't been declared yet, in a function, if it will be declared by the time the function will be called.
The thing here is that:
defines a global variable named foo in that script. so any function of that module will have access to it.
The piece of code listed above is global to the module and not inside any function.