[Tutor] Global presets ?

Brian van den Broek bvande at po-box.mcgill.ca
Sat Dec 4 18:34:35 CET 2004


Kent Johnson said unto the world upon 2004-12-04 06:21:
> You are on the right track. Put your common definitions in a 
> configuration module like this:
> 
> # Config.py
> arch_data_dir='/home/dave/mygg/gg1.3/arch_data'
> data_dir='/home/dave/mygg/gg1.3/data'
> 
> Then in client code, import Config. When you use the names defined in 
> Config you have to prefix them with the module name like this:

<SNIP>

> Alternately you can use either of these forms:

<SNIP>

> or this:
> 
> # Get *all* names defined in Config into our global namespace
> from Config import *
> 
> to make the bare names available in the client.
> 
> Kent
> 
> Dave S wrote:
> 
>> Hi there,
>>
>> I have some common data directories, like
>>
>> /home/dave/mygg/gg1.3/logs
>> /home/dave/mygg/gg1.3/data
>> /home/dave/mygg/gg1.3/datacore
>> /home/dave/mygg/gg1.3/arch_data
>>
>> which increasing numbers of scripts are accessing. At the begining of 
>> each script
>> I end up putting in declarations like
>>
>> arch_data_dir='/home/dave/mygg/gg1.3/arch_data'
>> data_dir='/home/dave/mygg/gg1.3/data'
>> ....
>>
>> over & over. This is OK until I want to move a directory
>>
>> Somewhere I read about importing a script to define common globals for 
>> all the scripts that import it.
>>
>> I tried this, and failed - the variable was only valid for the module, 
>> to be expected really :)
>>
>> Can anyone make a suggestion howto set up common global presets.
>>
>> Cheers
>> Dave
>>
>>
>>

Hi Dave, Kent, and all,

I have a caution about the
  from Config import *
idiom that Kent didn't mention.

It can lead to namespace pollution, in that if you have a module 'foo' 
with a name 'bar' and you are witting a script which says
  from foo import *
you have to be very careful that your script doesn't also assign to the 
name 'bar', else you may end up thinking you have two different things 
available when you don't. ('bar' will either point to your script's bar 
or to Config.bar, depending on whether you imported Config before or 
after your scripts assignment to bar.)

The first time this bites you, it can eat up hours of your life. (But 
I'm not bitter;-)

I avoid this by using the
  import examplemodule as em

That imports everything so that you accesses it by
  em.some_name
rather than
  examplemodule.some_name

I find that really handy for the handful of utility modules I import 
into most of my scripts. Then, I just have to be sure to avoid a small 
set of names -- 'em' in this case. And my python files have nice 
descriptive names, but I only have to type then once.

Best,

Brian vdB



More information about the Tutor mailing list