By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,143 Members | 1,919 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,143 IT Pros & Developers. It's quick & easy.

What is module initialization?

P: n/a
Hi,

I found on the net that there is something called module
initialization. Unfortunately, there is not much information for this.
However, small the information I found module initialization can be of
use to me in my project.

I'm currently messing with a problem where I'm keeping my global
variables ( or symbols) in a module and the other mdoules in the
project acess these global variables.

However, there is one case when a module updates one such global
variable but the variable is not getting updated in the module
containing global symbols ( variables). This happen only at the start
of the program and at rest of the places in the program that global
variable is not accessed.

So, I thought of using this module initialization where I will
intialize the module only once to update that variable. Ans in the
rest of the program where ever this module is imported I shall be able
to easily access the update value of the variable.

Could some one provide me a sample code of module intialization? And
how can I ensure that module initialization is done only once?

Thanks and regards,
Rajat
Sep 2 '08 #1
Share this Question
Share on Google+
6 Replies


P: n/a
On Tue, 02 Sep 2008 14:32:30 +0100, dudeja.rajat wrote:
I found on the net that there is something called module initialization.
Unfortunately, there is not much information for this. However, small
the information I found module initialization can be of use to me in my
project.
"Module initialization" is what happens when you import a module the
first time. In pure Python modules the module level code is executed and
in extension modules a special initializing function may be called.
However, there is one case when a module updates one such global
variable but the variable is not getting updated in the module
containing global symbols ( variables).
Sounds unlikely if you *really* update the attribute of the module and
not just rebind a local name that was bound to the object in the "global"
module before. Example:

from spam import egg

egg = 42 # This does *not* change `spam.egg` but just the local binding!

Could some one provide me a sample code of module intialization? And how
can I ensure that module initialization is done only once?
Module initialization is only done once, there's nothing to ensure.

Ciao,
Marc 'BlackJack' Rintsch
Sep 2 '08 #2

P: n/a
du**********@gmail.com a écrit :
Hi,

I found on the net that there is something called module
initialization.
The Python C api has a module init function for C-coded modules. There's
no need for such a thing in pure Python modules since all the top-level
code is executed when the module is loaded (as a main script or the
first time the module is imported).
Unfortunately, there is not much information for this.
However, small the information I found module initialization can be of
use to me in my project.

I'm currently messing with a problem where I'm keeping my global
variables ( or symbols) in a module and the other mdoules in the
project acess these global variables.
remember that there's no such thing as a truely global namespace in
Python. "global" really means "module level".
However, there is one case when a module updates one such global
variable
While this is technically legal, you should restrain yourself from doing
such a thing, unless you *really* know what you're doing and why.
but the variable is not getting updated in the module
containing global symbols ( variables).
I suspect you didn't use a qualified name when importing. You have to do
it this way :

# myglobals.py:
answer = 42

# question.py
import myglobals
myglobals.answer = "WTF ?"
So, I thought of using this module initialization where I will
intialize the module only once to update that variable. Ans in the
rest of the program where ever this module is imported I shall be able
to easily access the update value of the variable.

Could some one provide me a sample code of module intialization?
All statements at the top-level of a module are executed when the module
is loaded. That's all it takes wrt/ module initialization.
And
how can I ensure that module initialization is done only once?
Unless you're doing weird things with __import__ or the imp module, you
shouldn't have to worry. import do two things : locate, load *and cache*
the module *if* it isn't already in cache, and bind names into the
importing namespace.
Sep 2 '08 #3

P: n/a
While this is technically legal, you should restrain yourself from doing
such a thing, unless you *really* know what you're doing and why.
>but the variable is not getting updated in the module
containing global symbols ( variables).

I suspect you didn't use a qualified name when importing. You have to do it
this way :

# myglobals.py:
answer = 42

# question.py
import myglobals
myglobals.answer = "WTF ?"
But if I do :-
#question.py
from myglobals import *
myglobals.answer = "WTF ?"

will this work?
Sep 2 '08 #4

P: n/a
On Tue, 2 Sep 2008 15:32:07 +0100, du**********@gmail.com wrote:
But if I do :-
#question.py
from myglobals import *
myglobals.answer = "WTF ?"

will this work?
Why won't you try? In this case you should receive NameError.

--
Regards,
Wojtek Walczak,
http://tosh.pl/gminick/
Sep 2 '08 #5

P: n/a
du**********@gmail.com wrote:
># myglobals.py:
answer = 42

# question.py
import myglobals
myglobals.answer = "WTF ?"

But if I do :-
#question.py
from myglobals import *
myglobals.answer = "WTF ?"

will this work?
with the above definition of myglobals, no. "from myglobals import"
doesn't add the module object to the importing module's namespace.

have you read:

http://effbot.org/zone/import-confusion.htm

?

</F>

Sep 2 '08 #6

P: n/a
On Tue, Sep 2, 2008 at 6:22 PM, Fredrik Lundh <fr*****@pythonware.comwrote:
du**********@gmail.com wrote:
>># myglobals.py:
answer = 42

# question.py
import myglobals
myglobals.answer = "WTF ?"

But if I do :-
#question.py
from myglobals import *
myglobals.answer = "WTF ?"

will this work?

with the above definition of myglobals, no. "from myglobals import" doesn't
add the module object to the importing module's namespace.

have you read:

http://effbot.org/zone/import-confusion.htm

?

</F>

--
http://mail.python.org/mailman/listinfo/python-list
Thanks for your help guys that I got my problem resolved.

Regards,
Rajat
Sep 2 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.