Just to help any confusion for future readers, let me just explain what's happening behind the scenes here. In OP's code:
def run():
print var
if __name__ == '__main__':
var = 'yes'
run()
var
is declared at the top-level of the file and so var
automatically becomes a global variable.* Then run()
will notice that var
exists in the global scope and it'll simply print it.
This behaviour is often undesirable* so the solution is to avoid having var
be a global variable. To do that we need to declare var
inside of a function or class. One example:
def run():
print var # this line will fail, which is what we want
def main():
var = 'yes'
run()
if __name__ == '__main__':
main()
Since var
is declared inside a function, in this case main()
, var
only exists inside main()
's local scope. run()
will notice that var
doesn't exist inside its own local scope or in the global scope and it will fail.
*In Python, any variable declared at the top-level (meaning its not declared inside a function or class, it's just out in the open) is automatically considered a global variable. Global variables can be accessed from anywhere. This is typically undesirable. This is why good programmers will usually avoid writing top-level code and just put all their code in a main() function or other functions/classes.
*See why here. Or just google "python why are global variables undesirable".