Importing variables non-deterministic?

Dave Angel davea at davea.name
Mon Aug 19 03:45:00 EDT 2013


Antoon Pardon wrote:

> Op 17-08-13 17:01, Steven D'Aprano schreef:
>> 
>> And here you re-import the name "y" from struct_global. That rebinds the 
>> current module's "y" with whatever value struct_global.y has *now*, 
>> rather than a second (or a minute, or an hour) earlier when the first 
>> import took place. Obviously at some point between the first import and 
>> the second import, struct_global.y must have been reassigned from -1 to 
>> 62.
>> 
>> This goes to show why global variables are considered harmful, and why 
>> clean, modern program design tries to reduce the use of them as much as 
>> possible. Global variables are too easily modified by, well, *anything*. 
>> The sort of behaviour you are seeing is sometimes called "action at a 
>> distance" -- something, anything, anywhere in your program, possibly 
>> buried deep, deep down inside some function you might never suspect, is 
>> changing the global variable.
>
> I think you are overstating your case. Classes and functions are
> variables too and in general nobody seems to have a problem with them
> being global.
>

It's global *variables* that are to be avoided.  constants like clsases
and functions are fine.  On the other hand, class attributes can be
variable, and thus are to be avoided when reasonable.

There *are* places where global variables make sense, such as for
caching, or counting.  But those are typically hidden, so they are
global in lifetime, but not in scope.

-- 
DaveA





More information about the Python-list mailing list