Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
52 views

Importing Modules: Mymodule - Py Is The Module To Be Imported and Contains This

1. When importing a module, all code in the module is executed, including printing statements. This allows variables and functions to be accessed from the importing file after importing. 2. There are three main ways to import modules: importing just the module name, importing all names from the module, and importing specific names. All three methods work as expected. 3. Variables defined in a module are only accessible within that module by default. To use the variables in the importing file, they must be explicitly imported or getter/setter functions can be used to access global variables declared within the module.

Uploaded by

Ghanshyam Sharma
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views

Importing Modules: Mymodule - Py Is The Module To Be Imported and Contains This

1. When importing a module, all code in the module is executed, including printing statements. This allows variables and functions to be accessed from the importing file after importing. 2. There are three main ways to import modules: importing just the module name, importing all names from the module, and importing specific names. All three methods work as expected. 3. Variables defined in a module are only accessible within that module by default. To use the variables in the importing file, they must be explicitly imported or getter/setter functions can be used to access global variables declared within the module.

Uploaded by

Ghanshyam Sharma
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

1

Importing modules
The concept of importing modules may lead to some confusion, especially if you expect a
behaviour similar to other programming languages.
To see clearer I did some simple tests.
mymodule.py is the module to be imported and contains this:
print "HAHA"

def sayhi():
    print "Hi"

class Hello:
    def __init__(self):
        print "HELLO"

The main program for the test that imports mymodule is located in the same directory.
I tried different importing mechanisms:

1. Import only the name of mymodule to the namespace:


To access functions or objects, their name must be preceeded by the name of the imported module
import mymodule
h = mymodule.Hello()
mymodule.sayhi()

2. Import the whole namespace of mymodule:


(with the disadvantage of eventual name confusion, if the same name exists in both)
from importtest import *
h=Hello()
sayhi()

3. Import only selected functions / objects


from mymodule import sayhi, Hello
h=Hello()
sayhi()

The three methods had the expected result:


2

HAHA
HELLO
Hi
So:
1. All code residing in the imported module is executed, even if only selected functions or
objects are imported explicitely.
2. The 3 different methods of importing give the same result, as expected.
3. If the imported module is found in the same folder as the main program, there is no problem.

_______________________________________________________________________________

Modules and global variables

1. Using a variable defined in a module that is imported


Module mymodule is the module to be imported and contains only two statements:

x = 1
print „hello“

The first sets a variable, the second tells us that the module has well been imported.

Now we try to import the module and use the variable x

First try for the test program:

import mymodule
print x

This does not work!


The ‚hello‘ ist printed, that means the module is imported. But we get an error when we try to print
the variable x.
I must confess that, at first, this was an unexpected behavior.
As every statement of an imported module is executed, my conclusion was that importing a module
would be roughly the same as writing all the code into one bigger file.
And there I was wrong!
Why?
Variables are only global within the module in which they are defined! So they can't be accessed
from outside, even if the module is imported.

Second try:

from mymodule import x


3

print x

Now we have explicitely imported the name x from the namespace of mymodule.
So it is known to the main program. And so this works correctly!

Third try:

from mymodule import *


print x

This works also as we import the whole namespace to the main program.

Conclusion:
If we want to use variables defined in an imported module, we must import the whole
namespace (from mymodule import *) or seletively import the needed variables (from
mymodule import x).

2. Using a variable defined in the main program in an imported module

First try:

The main program contains:

y=1
import mymodule

and mymodule:

print 'hello'
print y

This does not work, as main program and mymodule have different namespaces.
Even a statement global y in one or both files does not help.

The solution:

Use get and set functions and a globaql variable in the imported module:

mymodule:

global y
y=-1 # default value

def set_y(yvalue):
global y
y=yvalue
4

def get_y():
return y

def print_y():
print y

Now we can work with the variable y in the main program:

from mymodule import *

print_y() # print default value

set_y(5) # set new value to 5


print_y() # and print it

set_y(7) # set new value


x= get_y() # get it from main module level
print x

Note:
In mymodule, it is important to use the global statement in the set_y function, because here the
value is changed. When the value is only read, as in print_y or get_y, the global statement is not
needed.

Conclusion:
• At module level (for a module that shall be imported), it is good to put the whole code
into functions that can be called from the outside.

• Default values can be defined at the beginning of the code.

• Variables declared with 'global' are global at module level, but not outside of it!

A still more pythonic way would be to use only objects in the imported module.

You might also like