Accessing "module Scope" Vars
Solution 1:
You probably want to read up on Python's namespaces. Way 1 is correct but generally unnecessary, never use 2. An easier approach is to just use a dict (or class or some other object):
my_globals = {'var': None}
def my_func():
my_globals['var'] = 'something else'Assignments always go into the innermost scope and the innermost scope is always searched first, thus the need for the global keyword. In this case you aren't assigning to a name, so it's unnecessary.
Solution 2:
Way 1 is the correct way when you absolutely must rebind a global variable. However you should ask yourself why you are modifying a global and whether there is something better you can do (such as encapsulating the behaviour in a class).
Importing a module into itself should be avoided as it is error prone. If the module is also a script you would sometimes need to import __main__ instead, or if the module is part of a package maybe you should be importing foo.my_module. In short, don't do that.
Solution 3:
Importing a module within itself can have unwanted side effects (like evaluating statements more than once.) I would suggest using "Way 1" and a tool like pylint to help verify your code and enforce common practices.
PyLint can be found at: http://www.logilab.org/project/pylint
Solution 4:
Avoid setting globals at all. You can create new namespaces with classes quite easily, so use class variables if you must.
For anything serious you need a proper design with classes anyways.
Post a Comment for "Accessing "module Scope" Vars"