On Mon, 03 Oct 2011 21:27:12 -0700, alex23 wrote: > rantingrick <rantingr...@gmail.com> wrote: >> Why? Well because many times i find myself wondering if this or that >> variable is local or global -- and when i say "global" i am speaking of >> module scope! The "global<DOT>" cures the ill. > > Given your stated propensity for huge code blocks not chunked into > functions, I'm not surprised you lose track of what is global, what is > nonlocal etc. This is another clear advantage of small functions: you > can view it all at once. For the rest of us, a variable is global if its > referenced but not defined in a specific scope. There's no need for such > verbose hand-holding. > > I'd say the wart is in your design practice rather than the language > itself.
Furthermore, rick's suggestion that all globals should be referenced using an explicit global namespace would become extraordinarily horrible in practice. Let's take a simple example from the shutil module: # From Python 2.5 shutil.py def copystat(src, dst): """Copy all stat info (mode bits, atime and mtime) from src to dst""" st = os.stat(src) mode = stat.S_IMODE(st.st_mode) if hasattr(os, 'utime'): os.utime(dst, (st.st_atime, st.st_mtime)) if hasattr(os, 'chmod'): os.chmod(dst, mode) Under Rick's proposal, that would be written: def copystat(src, dst): """Copy all stat info (mode bits, atime and mtime) from src to dst""" st = global.os.stat(src) mode = global.stat.S_IMODE(st.st_mode) if global.hasattr(os, 'utime'): global.os.utime(dst, (st.st_atime, st.st_mtime)) if global.hasattr(os, 'chmod'): global.os.chmod(dst, mode) Imported modules are variables like any other, and as they usually exist in the global scope, so they will all need to be explicitly referenced as global. This will get tiresome very quickly, and is a cure far worse than the disease, and alone is enough to disqualify this suggestion from serious consideration. Furthermore, "globals" in Python also includes the built-ins, so every reference to built-ins like len, sum, list, int, abs, etc. will also need an explicit reference, e.g. global.len, global.sum. (The alternative would be a significantly different name-lookup strategy: instead of names being "local" vs "global or builtin", they would be "local or builtin" vs "global". This will break monkey-patching.) -- Steven -- http://mail.python.org/mailman/listinfo/python-list